2011-09-13 16 views
4

私はNSNumber 1〜450を持っていると仮定します。NSMutableArrayに1から450まで、または450から1までのNSMutableArrayを追加できます.1から始めることができれば、 450で終わりますが、最終的に私が配列を列挙する時間が来ると、私は最終的にそれを逆にする必要があります。言い換えれば、列挙の最初のオブジェクトは450、最後のオブジェクトは1である必要があります。可能な場合、NSMutableArrayを逆にする必要はありませんか?

私はこの方法でコードを単純化しています。列挙に)、それは私の好ましい方法です。しかし、- (NSEnumerator *)reverseObjectEnumeratorのためのアップルのドキュメントは言う:それは、高速列挙プロトコルを使用する方が効率的である

( NSFastEnumerationを参照してください)。高速列挙は、Mac OS X v10.5 以降、およびiOS 2.0以降で利用できます。

は、だから私は、配列の逆転を避けるべきとNSMutableArrayのが最初の場所で所望の順序で作成されるように、単純にもう少し複雑なコードを書くのか?

+1

は高速列挙明確化をチェックアウト:どのように逆方向に列挙していますか? http://cocoawithlove.com/2008/05/fast-enumeration-clarifications.html – albertamg

+0

アレイの作成でどのような合併症が起きているのかを知るのは難しいので、おそらくこのコードを表示するべきです。 –

答えて

7

ような何かをしていることを確認する必要があるもののループのために、documentation程度の高速列挙もreverseObjectEnumerator:メソッドを使用しています例として:

NSEnumerator *enumerator = [array reverseObjectEnumerator]; 
for (NSString *element in enumerator) { 
    //... 
} 

のほかに、あなたの質問にはたくさんの時期尚早な最適化のように聞こえる...

+0

ありがとう、私はこの問題を引き起こす原因となったドキュメントの行を誤解していることがわかりました。それは時期尚早の最適化のように思えるかもしれませんが、私がやっていることは、非常に多くのループが関わっているので、最適化の問題があることを知っています。 – maxedison

1

いいえ、正しい順序で配置するために、より複雑なコードを書く必要はありません。 reverseObjectEnumeratorはうまく動作しますが、わずかに遅くなります。パフォーマンスは大きな関心事である場合は、以下のスニペットのいずれかがよく(2の高速化は、whileループである)に動作します

// Assuming 'array' is your NSMutableArray 
int i = [array count]; 
while(i--) { 
    Object *current = [array objectAtIndex:i]; 
    // Mess around with current 
} 

0から450と最後にあなたを開始することをまたにこれを行うことができますあなたは、インデックス449で始まるか、あなたはあなたがNSEnumeratorインスタンスに速い列挙体を使用することができます

for(int i = [array count]; i > 0 ; i--) { 
    Object *curreyt = [array objectAtIndex:i-1]; 
    // Mess around with current 
} 
関連する問題