4

NSDictionaryを並べ替える正しい方法は、キーから配列を作成し、配列を並べ替えてから、配列を列挙してそこからNSDictionaryを操作することであることを理解しています。私の質問は、NSDictionary * dictの場合、文字列のキーと値を使用して、

なぜこれがアルファベット順なのですか?

NSLog(@"%@", dict);

しかし、これはそうではありません:

for (NSString *w in dict)
{
    NSLog(@"%@", w);
}

奇妙に思えます...私は何か間違ったことをしていますか?

前もって感謝します。

4

2 に答える 2

6

これは「メモリ内」ではありません-%@により、dictでメッセージが呼び出され、メッセージがソートされます。列挙することは、コンテンツへの最速の生のアクセスを提供することを目的としています。並べ替えが必要な場合は、並べ替える必要があります。

Objective-C用のこの無料のソートされた辞書を見てください

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

于 2010-11-19T20:27:00.000 に答える
2

最初のものはあなたが説明した通りに配列をソートするので、ユーザー/プログラマーが物を見つけやすくするために。ただし、下位レベルを使用すると、反復順序が取得されますCFCopyDescription(dict)

CoreFoundationコレクションのソースコードは、Objective-Cインターフェイスがなくても利用できます。NSDictionary/CFDictionaryNSSet/CFSetはに基づいておりCFBasicHash、当然のことながらハッシュテーブルを実装しています。そして、メモリ順序(およびCFBasicHash.m)のCFCopyDescription()要素に対する高速反復ループ。実際の順序は、ハッシュに基づくクイックルックアップ用に設計されています。ハッシュテーブルに慣れていない場合は、ウィキペディアを参照してください。CFBasicHashApply()CFBasicHashGetBucket()

于 2010-11-19T20:29:36.193 に答える