72

NSArray特殊なケースでそれを逆方向に反復処理する必要があるため、最初に最後の要素を確認します。これはパフォーマンス上の理由によるものです。最後のものが意味をなさない場合、それ以前のものはすべて無視できます。だからループを断ち切りたい。しかし、0 から n まで反復するとうまくいきません。n から 0 に移動する必要があります。おそらく、私が知らないメソッドまたは関数があるので、ここで車輪を再発明する必要はありません。

4

5 に答える 5

196

他の回答を追加するには-[NSArray reverseObjectEnumerator]、Objective-C 2.0 (Leopard、iPhone で利用可能) の高速列挙機能と組み合わせて使用​​できます。

for (id someObject in [myArray reverseObjectEnumerator])
{
    // print some info
    NSLog([someObject description]);
}

いくつかの詳細情報を含むソース: http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.html

于 2009-05-10T00:16:19.130 に答える
17

これはパフォーマンスのためであるため、いくつかのオプションがあり、どれが最適かを確認するためにすべてを試してみることをお勧めします。

  • [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
  • -[NSArray reverseObjectEnumerator]
  • 配列の逆コピーを作成し、それを通常どおり反復します
  • 標準の C for ループを使用して、配列を逆方向に開始および処理します。

より極端な方法 (パフォーマンスが非常に重要な場合)

  • Cocoa が高速なオブジェクト列挙をどのように実装しているかを読んで、逆に独自の等価物を作成してください。
  • C または C++ 配列を使用します。

他にもあるかもしれません。その場合は、どなたでも自由に追加してください。

于 2009-05-09T23:45:00.403 に答える
12

ここから:

 NSEnumerator* myIterator = [myArray reverseObjectEnumerator];
 id anObject;

 while( anObject = [myIterator nextObject])
 {
     /* do something useful with anObject */
 }
于 2009-05-09T22:24:34.873 に答える
2
[NsArray reverseObjectEnumerator]
于 2009-05-09T22:21:22.650 に答える