0

重複の可能性:
反復中に NSMutableArray から削除する最良の方法は?

Mods: これはこの質問と重複していることに気付きました。閉じる/削除できますか?

4

2 に答える 2

5

一時的な配列または新しい配列を作成したくない場合は、これを使用できます。

NSMutableArray *array = ...; // your mutable array

NSIndexSet *toBeRemoved = [array indexesOfObjectsPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
    // The block is called for each object in the array.
    BOOL removeIt = ...; // YES if the element should be removed and NO otherwise
    return removeIt;
}];
[array removeObjectsAtIndexes:toBeRemoved];

(ただし、テンポラリNSIndexSetが使用されます。)

備考: Richard J. Ross III が提案したように、反復中に各要素を個別に削除するのではなく、一致するすべての要素を「一度に」削除する方が効率的かもしれないと考えました。

しかし、短いテストで、そうではないことがわかりました。私のコンピューターでは、1000000 個の要素を持つ配列から 1 つおきの要素を削除するのに、両方の方法でほぼ同じ時間がかかります。

于 2012-11-06T20:22:57.437 に答える
2

これを行うには NSPredicate を使用できます。この SO の質問と回答を参照してください。

https://stackoverflow.com/a/129942/36984

そして、これに関するAppleのドキュメント:

https://developer.apple.com/library/mac/documentation/Cocoa/Reference/Foundation/Classes/NSMutableArray_Class/Reference/Reference.html#//apple_ref/occ/instm/NSMutableArray/filterUsingPredicate :

于 2012-11-06T20:16:40.203 に答える