2012-03-21 15 views
5

そのアイテムをソートするから、私はこのコード停止NSDictionaryの

NSDictionary *tempDict = [NSDictionary dictionaryWithObjects: 
[NSArray arrayWithObjects:@"authorId","authorName","authorDescription",@"image",nil] forKeys: 
[NSArray arrayWithObjects:@"id",@"name",@"desc",@"image",nil]]; 
NSLog(@"%@",[tempDict description]); 

を持っており、出力はあなたが辞書が何らかの理由で、アルファベット順に、キーでソートされていることがわかり

desc = authorDescription; 

id = authorId; 

image = image; 

name = authorName; 

です。私はこの辞書をplistに追加する必要があるので、これは私にとっては良くないことです。このplistには未分類のキーを持つ辞書があります。だから私はこのソートを避けることができますか?

答えて

6

ソートがNSLogで使用されている[NSDictionary description]、によるものです。 NSDictionaryの基本的な機能ではありません。高速列挙または[dictionary allKeys]でキーにアクセスすると、ソートされません。

しかし、あなたが望むものが「ソートされていない」(ランダム)であれば、「ソート」は可能なランダムシーケンスの1つに過ぎません。あなたが本当にソートしたくないのであれば、そのソートはそのサブセットのために重要ではありません。

ソートが重要な場合は、「ソートされていない」という意味ではなく、「挿入オーダーのような他のソートされたオーダー」を意味します。 NSDictionaryを何らかの方法でソートする必要がある場合は、それをNSArrayに変換することによって課す必要があります。

+0

私は '[dataDict allKeys]'を使用していますが、依然として私のキーのランダムな順序を取得しています。 – upendra

+0

@upendra私はその質問を理解していません。 'allKeys'のために約束された注文はありません。 –

2

ソートされていません。それは任意の順序で表示されます。いくつかの項目を追加すると、おそらく注文の変更が表示されます。

(内部的に、ストレージは、いくつかの狂った理由で、実際にソートされ、いる可能性がありますが、あなたはそれについてできることは何がありません。)

+0

私はplistにこのdictを書いています.plistとこの辞書をキーで(または任意の順序で - それは問題ではありません)plistでソートしています。私には受け入れられません – user1248568

+0

luliusが言ったように、NSDictionaryはその内容をソートしていません。 NSDictionaryは基本的にハッシュテーブルです。ソートされたものは印刷結果だけです。 'tempDict'を別の辞書に追加すると、オブジェクト/キーのペアが追加され、特別な順序(NSDictionaryの内部構造)で保存されます。 また、データがソートされていなくても、plistを使用して初期化された他のNSDictionaryをNSLoggingすることができます。 – nacho4d