0

例如,这是一个相当简单的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]];
}

是的,我知道这样做很可能不是我真正想做的(例如:xrange在 python 中),但请幽默我的好奇心。=)

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

4

2 回答 2

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 方法以使您的类更高效。

于 2012-06-28T05:44:19.410 回答
0
NSRange range = NSMakeRange(0, 100);

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

NSUInteger loc;
for(loc = range.location; loc < range.length; loc++)
{ 
}
于 2012-06-28T05:06:00.847 回答