Mods: これはこの質問と重複していることに気付きました。閉じる/削除できますか?
質問する
2563 次
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のドキュメント:
于 2012-11-06T20:16:40.203 に答える