2009-05-09 19 views
60

私はNSArrayを持っていますので、最後の要素を最初に見るように、特殊なケースでそれを反復する必要があります。パフォーマンス上の理由からです:最後のものが意味をなさない場合、以前のものはすべて無視できます。だから、私はループを壊したい。しかし、0からnまで順方向に進むなら、それはうまくいきません。私はnから0に移動する必要があります。わからない方法や関数があるかもしれないので、ここでホイールを再作成する必要はありません。NSArrayを後方に反復する簡単な方法はありますか?

+4

"Objective-CでNSArrayをどのように逆転できますか?"全く異なる質問です。 – Nestor

+0

Swift:http://stackoverflow.com/questions/24508592/how-to-iterate-for-loop-in-reverse-order-in-swift – Suragch

答えて

179

、あなたは(Leopardで利用でき、iPhone)のObjective-C 2.0の高速な列挙機能と組み合わせて-[NSArray reverseObjectEnumerator]を使用することができます。http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.html

:いくつかのより多くの情報と

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

ソース

+0

これは高速列挙型と考えられますが、これは '[myArray count] -1'から始まる通常のforループよりも速いのですか?どのように 'NSString'を逆に反復処理しますか? – ma11hew28

+0

私は今ここにリンクがありませんが、アップルのエンジニアがどのように速い列挙体が機能し、なぜ速いのか説明しているどこかのビデオ(WWDCでした)があります。これは、インデックスベースのNSArray列挙型と古典的なFoundation列挙型の両方よりも優れており、シナリオに応じて多くの点で優れています。 –

+0

私は辞書の逆のループを実行する必要があります、どのように行うには? –

2
[NsArray reverseObjectEnumerator] 
12

hereから:

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

while(anObject = [myIterator nextObject]) 
{ 
    /* do something useful with anObject */ 
} 
16

これは性能ものためであるので、あなたは多くのオプションを持って、よく最高の作品かを確認するためにそれらすべてを試してみることをお勧めだろう。

  • -[NSArray reverseObjectEnumerator]
  • Create a reverse copy of the array
  • [array enumerateObjectsWithOptions:NSEnumerationReverse usingBlock:…]
    • その通常
    • 使用をループするための標準的なCを反復し、起動してアレイを介して逆方向に働きます。ココアは、高速オブジェクトの列挙を実装し、逆に、独自の等価を作成する方法をよく読んで

    もっと極端な方法(パフォーマンスが超臨界である場合)

    • CまたはC++配列を使用します。

    他にもあります。この場合、誰でも自由に追加することができます。他の回答に追加するには

    +1

    enumerateObjectsWithOptions:NSEnumerationReverseが最良の答えですあなたはどのインデックスにいるのかを知る必要があります。ありがとう!!! –

    0
    for (int i = ((int)[array count] - 1); i > -1; i--) { 
        NSLog(@"element: %@",array[i]); 
    } 
    
    関連する問題