首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用NSRange进行循环

使用NSRange进行循环
EN

Stack Overflow用户
提问于 2011-11-30 12:02:33
回答 4查看 7.5K关注 0票数 7

我正在尝试使用NSRange来保存一系列年份,例如

代码语言:javascript
运行
复制
NSRange years = NSMakeRange(2011, 5);

我知道NSRange主要用于过滤,但是我想循环遍历范围中的元素。是否可以在不将NSRange转换为NSArray的情况下实现

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-30 12:10:29

这听起来有点像你期望NSRange像一个Python range对象。它不是;NSRange只是一个结构

代码语言:javascript
运行
复制
typedef struct _NSRange {
       NSUInteger location;
       NSUInteger length;
} NSRange;

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

代码语言:javascript
运行
复制
NSUInteger year;
for(year = years.location; year < NSMaxRange(years); year++ ){
    // Do your thing.
}

(仍然假设您正在考虑Python。)ObjC中有一种称为fast enumeration的语法,用于迭代NSArray的内容,类似于Python for循环,但由于文字和原始数字不能放入NSArray中,因此不能直接从NSRange转到Cocoa数组。

不过,一个类别可以让这件事变得更容易:

代码语言:javascript
运行
复制
@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;
}

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

代码语言:javascript
运行
复制
NSArray * years = [NSArray WSSArrayWithNumbersInRange:NSMakeRange(2011, 5)];
for( NSNumber * yearNum in years ){
    NSUInteger year = [yearNum unsignedIntegerValue];
    // and so on...
}
票数 8
EN

Stack Overflow用户

发布于 2011-11-30 12:09:02

请记住,NSRange是一个包含两个整数的结构,表示范围的起始和长度。您可以使用for循环轻松地遍历所有包含的整数。

代码语言:javascript
运行
复制
NSRange years = NSMakeRange(2011, 5);
NSUInteger year;
for(year = years.location; year < years.location + years.length; ++year) {
    // Use the year variable here
}
票数 6
EN

Stack Overflow用户

发布于 2013-07-01 22:30:38

这是一个有点老的问题,但是使用NSArray的另一种选择是创建一个具有所需范围的NSIndexSet (使用indexWithIndexesInRange:initWithIndexesInRange:),然后使用块枚举,就像在https://stackoverflow.com/a/4209289/138772中一样。(看起来很相关,因为我自己也在检查这个。)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8320987

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档