生成一系列NSNumbers的最有效方法是什么?

时间:2012-06-28 04:47:13

标签: objective-c nsarray nsnumber

这是一个相当简单的内置python,例如:x = range(0,100) 如何使用objective-c方法完成相同的专长?肯定有比NSMutableArray和for循环更好的东西:

NSMutableArray *x = [NSMutableArray arrayWithCapacity:100];
for(int n=0; n<100; n++) {
    [x addObject:[NSNumber numberWithInt:n]];
}

是的,我知道这样做很可能不是我实际想要做的事情(例如:python中的xrange),但请幽默我的好奇心。 =)

澄清:我想要一个包含一系列NSNumber的NSArray,以便可以通过改组元素或按外部指标排序来进一步处理数组。

2 个答案:

答案 0 :(得分:1)

如果你想要这样一个数组,你可能想要自己做NSArray的特定子类。

一个非常基本的实现示例如下:

@interface MyRangeArray : NSArray
{
@private
    NSRange myRange;
}

+ (id)arrayWithRange:(NSRange)aRange;
- (id)initWithRange:(NSRange)aRange;

@end

@implementation MyRangeArray

+ (id)arrayWithRange:(NSRange)aRange
{
    return [[[self alloc] initWithRange:aRange] autorelease];
}

- (id)initWithRange:(NSRange)aRange
{
    self = [super init];
    if (self) {
        // TODO: verify aRange limits here
        myRange = aRange;
    }
    return self;
}

- (NSUInteger)count
{
    return myRange.length;
}

- (id)objectAtIndex:(NSUInteger)index
{
    // TODO: add range check here
    return [NSNumber numberWithInteger:(range.location + index)];
}

@end

之后,您可以覆盖其他一些NSArray方法,以提高您的课程效率。

答案 1 :(得分:0)

NSRange range = NSMakeRange(0, 100);

您可以通过以下方式迭代此范围:

NSUInteger loc;
for(loc = range.location; loc < range.length; loc++)
{ 
}