2012-03-05 15 views
8

私はObjective-Cをかなり新しくしています。今日はNSDictionariesで作業していて、allKeysメソッドを見つけました。私が理解しているように、辞書のキーを含むNSArrayをランダムな順序で返します。しかし、この順序は常に同じですか?つまり、同じ辞書のallKeysを20回連続して呼び出すと、同じ結果を得ることが保証されますか?NSDictionary allKeys - 常に同じ順序を返しますか?

ありがとう、

答えて

8

あなたが変異されていない辞書上の行の方法を20回呼び出した場合、それは最も可能性が高い同じ順序を返します。つまり、実装の詳細に大きく依存するため、これに頼ることを強くお勧めします。私がそれはおそらく同じ順序を返すと言っている唯一の理由は、辞書は内部構造を突然変異させるべきではないため、突然変異がない場合、別の順序を得る唯一の方法は明示的非決定性を導入します。つまり、乱数ジェネレータやCPUのクロックなどのグローバル状態に頼っています。これは、NSDictionaryがこれを行うことは非常に疑問です。

キーの順序を同じにする必要がある場合は、辞書からキーを取得した後で並べ替えることをお勧めします。

+0

。 –

+0

@Catfish_Man:そうであれば、 'NSDictionary'を別のスレッドに渡すことは安全ではありません。現在の知恵は、スレッド間でNSDictionariesを渡すことは、辞書が不変である限り安全です。 –

+0

不変ディクショナリは、一度入力すると再ハッシュする必要はありません。何も変更できないためです。私は変更可能なものを指していました。 –

0

これを理解する方法は、簡単なテストプログラムを作成することです。実際、このような保証されていない、文書化されていない結果に決して頼るべきではありません。これはプログラミングの習慣が悪く、新しいOSリリースで壊れる可能性がかなり高いです。

特定の順序に戻るキーが必要な場合は、キーを取得した後で並べ替える必要があります。あなたは方法のグループ-[NSArray sortedArrayUsing...]でそれを行うことができます。

1

NSDictionaryオブジェクトはパフォーマンスを維持するために順序付けられていません。

あなたが注文した辞書が必要な場合は、このプロジェクトを見て:NSDictionaryのアクセスが焼き直しを誘発する可能性がある場合には当然の怠惰な蒸し返しをしない限り

http://code.google.com/p/cocoa-sorted-dictionary/

+0

私はそれに感謝します。 – KerrM

関連する問題