web-dev-qa-db-ja.com

NSMutableArrayオブジェクトを順番に追加

要素を持つNSMUtableArrayがあります。次に例を示します。

 a、b、c、e 

オブジェクトdcの後ろとeの前に追加します。つまり、並べ替えられた配列にオブジェクトを挿入します(オブジェクトはカスタムオブジェクトにすることもできます)。

知りたい:forを使用して位置を見つける以外に、それを実装する他の方法はありますか? iOS APIを使用することをお勧めします。

ありがとう。

52
scorpiozj

-[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値を返すブロックオブジェクトです。

112
user557219

要素を既知のインデックス(位置)に挿入するには

- (void)insertObject:(id)anObject atIndex:(NSUInteger)index

http://developer.Apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html

以前にNSMutableArrayに配置されたオブジェクトの位置を見つけるには、

- (int)indexOfObject:(id)anObject

NSMutableArray-文字列で検索して配列インデックス整数を取得

セクション配列内のオブジェクトの検索
http://developer.Apple.com/library/mac/#documentation/Cocoa/Reference/Foundation/Classes/NSArray_Class/NSArray.html

3
Marek Sebera

新しいオブジェクトをどちらかの端に追加し、配列をもう一度並べ替えます。追加する配列が既にソートされている場合、1つのオブジェクトを移動する再ソートは、自分で実装するものとほぼ同じくらい速くなります。

NSMutableArray *things; // populated 
id newObject;
...
[things addObject:newObject atIndex:0];
[things sortUsingSelector:@selector(compare:)];
3
NSResponder