5

Key-Valueリストのplist保存に使用しています。アプリケーションがそのリストを必要とする場合、 NSDictionaryにリストをロードしようとします。ここまではすべて順調です。

plistファイルをロードする方法は次のとおりです。

NSString *myPlistFilePath = [[NSBundle mainBundle] pathForResource: @"cities" ofType: @"plist"];
cities = [NSDictionary dictionaryWithContentsOfFile: myPlistFilePath];

私たちが見るとき、citiesNSDictionaryです。次に、すべてのリストキー値をTableViewにプッシュしましたが、どういうわけか、plistファイルのようにリストされていません。ランダムに並べ替えます。

理解する方法はありますか?前もって感謝します。

4

3 に答える 3

4

NSDictionaryは順序付けられたコレクションではありません。つまり、コンテンツの順序を保持することを保証するものではありません。その唯一の機能は、キーから値にマップすることです。

順序付けされたコンテンツが必要な場合は、たとえばkeysSortedByValueUsingSelectorを使用してNSDictionaryからデータを抽出できます。これにより、コレクション内のデータが抽出され、条件で並べ替えられ、(順序を保持する)NSArrayに格納されます。

または、都市辞書の順序付きリストを含む、plistのルートで配列を使用することを検討してください。次に、そこに含まれる配列を反復処理すると、それらはplistに含まれる配列の順序になります。

于 2013-01-16T11:25:03.463 に答える
1

NSDictionaryは、順序付けられたデータ構造ではありません。

オブジェクトは機能に基づいてallKeysリストされ、キーは未定義の方法でリストされます。

機能については、アップルのドキュメントを参照してくださいallKeys

allKeysディクショナリのキーを含む新しい配列を返します。

  • (NSArray *)allKeys

戻り値ディクショナリのキーを含む新しい配列、またはディクショナリにエントリがない場合は空の配列。

考察配列内の要素の順序は定義されていません。

于 2013-01-16T11:25:14.170 に答える
0

セレクターを使用してキーを並べ替えるのを避けたい場合は、plistのルートで配列を使用することを検討してください。次に、配列を反復処理すると、順序が保持されます。これはo(n)を実行します。これは、log(n)の係数で可能な最速のソートアルゴリズムよりも短いです
。例:

cities{
  list[
    city{}
    city{}
    city{}
    ...
  ]
}
于 2015-01-08T20:12:02.627 に答える