0

たとえば、Pythonに組み込まれているのはかなり単純です。objective x = range(0,100) -cメソッドを使用して同じ偉業を達成するにはどうすればよいですか?確かに、NSMutableArrayとforループよりも優れたものがあります。

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

はい、これを行うことは私が実際にやりたいことではない可能性が高いことを認識しています(例:xrangePythonで)が、私の好奇心をユーモアを交えてください。=)

明確化: 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 に答える