1

NSDictionaryを作成し、そこにいくつかのオブジェクトとキーを配置します。しかし、問題は、キーの最初の文字で理解したように、キーがソートされていることです。たとえば、「G」、「B」、「C」を入れます。つまり、「B」、「C」、「G」のように並べ替えて表示します。並べ替えを無効にしたいのですが、どうすればよいですか。私はもっ​​と複雑な例で作業していますが、私の質問では状況を単純に保ちたいと思います。 質問: NSDictionaryで並べ替えを無効にするにはどうすればよいですか、またはNSDictionaryを自分で並べ替えるにはどうすればよいですか?

前もって感謝します!

4

2 に答える 2

4

「並べ替え」はNSDictionary知っていることではありません。データを特定の順序にしたい場合は、NSArray代わりに使用する必要があります

于 2012-07-10T19:20:59.820 に答える
4

@Dan F が述べたように、NSDictionary はエントリをソートしません。@Hot Licks のコメントで述べたように、NSDictionary はその内容を任意の順序で並べます。ディクショナリ内のエントリの順序については、何も想定しないでください。NSArray は、この種のものにより適しています。

事前に定義された並べ替え順序で辞書の内容を表示したい場合は、関連付けられている値を使用して並べ替えられたキーの配列を取得できます。NSDictionary クラスには、これをサポートする メソッドkeysSortedByValueUsingSelector:とメソッドがあります。keysSortedByValueUsingComparator:したがって、値を昇順にソートして表示順序を制御したい場合は、次のように実装できます。

NSArray *orderedKeys = [myDictionary keysSortedByUsingSelector:@selector(caseInsensitiveCompare:)];
for (int i = 0; i < [sortedKeys count]; i++) {
    NSString *key = [sortedKeys objectAtIndex:i];
    NSLog(@"%@ = %@", key, [myDictionary objectForKey:key]);
}

結果には、辞書内の各エントリが、各エントリ内の値でソートされて表示されます。

于 2012-07-10T19:47:16.110 に答える