2009-08-18 9 views

答えて

16

いいえ、注文されていません。辞書に要素を追加したり削除したりしない限り、要素は同じ順序で残りますが、要素を追加または削除するとすぐに新しい順序が完全に異なります。

あなたが発注するキー/値が必要な場合は、代わりにNSArray(またはいくつかの他の注文データ構造)を使用します。

+2

@ kraag22:NSDictionaryドキュメンテーションのどこにも、注文に関する約束や保証がありません。単に、キーと値の不変な関連付けを管理するオブジェクトへのプログラムインタフェースです。 '-allKeys'と' -allValues'メッセージのドキュメントは、それらのメソッドから返された順序が定義されていないことを呼び出していますが、他の方法を列挙する方法をより明確にすることは悪い考えではないでしょう辞書要素。 –

0

キーは、NSDictionaryにアクセスするときに同じ順序であることが決して保証されません。キーを比較することができれば(あなたの質問に答えられると思われます)、並べ替え順にアクセスする必要がある場合は、いつでも並べ替えることができます。

あなたは最初の配列にキーを読み、コースの配列をソートすることにより、これを行う必要があるでしょう。

0

NSDictionaryのは、Apple's referenceによれば、基本的にハッシュテーブルのラッパーです。そうではありません、彼らは特定の順序であることが保証されていません。

+0

彼らはどのようにそのハッシュテーブルにアクセスしますか?単純なハッシュテーブルを見たことはありませんが、どのように見えるかを知りたいです。これは内部的に2つの同期NSArrayを使用することと大きな違いはありますか? –

+0

ハッシュテーブルがデータ構造のように見えていますか? Wikiはかなり良いexplinationを持っています:http://en.wikipedia。org/wiki/Hash_table Appleが具体的にどのように実装しアクセスするのか知りたいのであれば、私たちが利用できる唯一のものはヘッダーファイルです;) –

+0

そういう場合、ハッシュテーブルはほとんどすべて与えられた文字列の正しい配列インデックスを計算するハッシュ関数key +配列の大きさ。実装は難しいが、パフォーマンスは良いと思う。それが本当であれば、どれくらい多くのアイテムが辞書に追加されても問題はありません。 –

2

NSDictionaryのキー&値が順序付けされていません。あなたのオプション:

  • あなたは
  • 書き込みを望む以上
  • 書き込みのラッパーであるか追加されますNSDictionaryの既存のサブクラスを見つけ、既存のクラスを見つけるために、キーの別々の配列を維持しますご注文のためのAPI
0

実際には、2つの異なるデバイスでプログラムを実行しても、同じプログラムであっても、まったく同じバージョンのオペレーティングシステムであっても、同じ順序であっても頼りにすることはできません。

たとえば、iPad Airでプログラムを実行すると、iOSのバージョンがまったく同じ場合でも、NSDictionary内の要素の順序がiPad Retinaで同じプログラムを実行する場合と異なる場合があります。要するに

、NSDictionaryの内の要素の順序は、当てにしてはなりません。あなたはいつもそれらが不特定の順序であるかもしれないと仮定しなければなりません、それは異なるデバイスで異なるかもしれません。

関連する問題