objective-c – 使用NSRange循环

我正在尝试使用NSRange来保持一定年限,例如
NSRange years = NSMakeRange(2011,5);

我知道NSRange主要用于过滤,但我想循环遍历范围内的元素.如果没有将NSRange转换为NSArray,这可能吗?

解决方法

听起来有点像你期望NSRange像Python范围对象.不是; NSRange只是一个结构
typedef struct _NSRange {
       NSUInteger location;
       NSUInteger length;
} NSRange;

不是一个对象.一旦创建了一个,就可以在普通的for循环中使用它的成员:

NSUInteger year;
for(year = years.location; year < NSMaxrange(years); year++ ){
    // Do your thing.
}

(仍在假设您正在考虑使用Python.)ObjC中的语法称为fast enumeration,用于迭代NSArray的内容,该内容与Python for循环非常相似,但由于文字和原始数字不能被放置进入NSArray,你不能直接从NSRange到Cocoa数组.

但是,类别可以使这更容易:

@implementation NSArray (WSSRangeArray)

+ (id)WSSArrayWithNumbersInRange:(NSRange)range
{
    NSMutableArray * arr = [NSMutableArray array];
    NSUInteger i;
    for( i = range.location; i < NSMaxrange(range); i++ ){
        [arr addobject:[NSNumber numberWithUnsignedInteger:i]];
    }

    return arr;
}

然后,您可以创建一个数组并使用快速枚举:

NSArray * years = [NSArray WSSArrayWithNumbersInRange:NSMakeRange(2011,5)];
for( NSNumber * yearNum in years ){
    NSUInteger year = [yearNum unsignedIntegerValue];
    // and so on...
}

相关文章

本程序的编译和运行环境如下(如果有运行方面的问题欢迎在评...
水了一学期的院选修,万万没想到期末考试还有比较硬核的编程...
补充一下,先前文章末尾给出的下载链接的完整代码含有部分C&...
思路如标题所说采用模N取余法,难点是这个除法过程如何实现。...
本篇博客有更新!!!更新后效果图如下: 文章末尾的完整代码...
刚开始学习模块化程序设计时,估计大家都被形参和实参搞迷糊...