NSRange次のような年の範囲を保持するために使用しようとしています
NSRange years = NSMakeRange(2011, 5);
主にフィルタリングに使用されることはわかってNSRangeいますが、範囲内の要素をループしたいと考えています。NSRangeを に変換せずにそれは可能NSArrayですか?
NSRange次のような年の範囲を保持するために使用しようとしています
NSRange years = NSMakeRange(2011, 5);
主にフィルタリングに使用されることはわかってNSRangeいますが、範囲内の要素をループしたいと考えています。NSRangeを に変換せずにそれは可能NSArrayですか?
NSRangePythonrangeオブジェクトのようになることを期待しているように思えます。そうではありません; NSRange単なる構造体です
typedef struct _NSRange {
NSUInteger location;
NSUInteger length;
} NSRange;
オブジェクトではありません。作成したら、そのメンバーを単純な古いforループで使用できます。
NSUInteger year;
for(year = years.location; year < NSMaxRange(years); year++ ){
// Do your thing.
}
(まだ Python について考えているという前提で作業しています。) Python ループに心地よく似ている、の内容を反復処理するための高速列挙と呼ばれる構文が ObjC にありますが、リテラルおよびプリミティブな数値を入力できないためです。 anからCocoa 配列に直接移動することはできません。NSArrayforNSArrayNSRange
ただし、カテゴリを使用するとそれが簡単になります。
@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...
}
NSRange は、範囲の開始と長さを表す 2 つの整数を保持する構造体であることを思い出してください。for ループを使用して、含まれているすべての整数を簡単にループできます。
NSRange years = NSMakeRange(2011, 5);
NSUInteger year;
for(year = years.location; year < years.location + years.length; ++year) {
// Use the year variable here
}