要素を持つNSMUtableArray
があります。次に例を示します。
a、b、c、e
オブジェクトd
をc
の後ろとe
の前に追加します。つまり、並べ替えられた配列にオブジェクトを挿入します(オブジェクトはカスタムオブジェクトにすることもできます)。
知りたい:for
を使用して位置を見つける以外に、それを実装する他の方法はありますか? iOS APIを使用することをお勧めします。
ありがとう。
-[NSArray indexOfObject:inSortedRange:options:usingComparator:]
NSArrayに、現在ソートされている配列範囲を指定して、オブジェクトを挿入する必要があるインデックスを要求します。
たとえば、配列全体がソートされていると仮定します。
NSMutableArray *array = …;
id newObject = …;
NSComparator comparator = …;
NSUInteger newIndex = [array indexOfObject:newObject
inSortedRange:(NSRange){0, [array count]}
options:NSBinarySearchingInsertionIndex
usingComparator:comparator];
[array insertObject:newObject atIndex:newIndex];
この方法は二分探索を使用するため、配列内のすべての要素を反復するよりも効率的です。
コンパレータは、id
タイプの2つのオブジェクトを受け取り、NSComparisonResult
値を返すブロックオブジェクトです。
要素を既知のインデックス(位置)に挿入するには
- (void)insertObject:(id)anObject atIndex:(NSUInteger)index
以前にNSMutableArrayに配置されたオブジェクトの位置を見つけるには、
- (int)indexOfObject:(id)anObject
NSMutableArray-文字列で検索して配列インデックス整数を取得
セクション配列内のオブジェクトの検索
http://developer.Apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html
新しいオブジェクトをどちらかの端に追加し、配列をもう一度並べ替えます。追加する配列が既にソートされている場合、1つのオブジェクトを移動する再ソートは、自分で実装するものとほぼ同じくらい速くなります。
NSMutableArray *things; // populated
id newObject;
...
[things addObject:newObject atIndex:0];
[things sortUsingSelector:@selector(compare:)];