0

次の構文を使用して辞書を印刷しています。

for(id key in myDict)
    NSLog(@"key=%@ value=%@", key, [myDict objectForKey:key]);

しかし、私は、oederがインデックスに従っていないことに気づきました。たとえば、私の辞書が

myDict = { 1:a, 2:b, 3:c....26:z}

上記のコードは、値をoreder 1、2、3、4ではなく、ランダムな順序で出力します。

上で指定したような列挙コードを使用して、その辞書を順番にトラバースするにはどうすればよいですか。私の使用法の鍵は、 "ajay" "abhi:などの文字列です。

編集:キーを別の配列にコピーすることは避けられませんか?それが唯一の方法です。

4

5 に答える 5

2
How do I get to traverse that dictionary in order using enumeration code, like the one specified above. The key in my usage is a string such as "ajay" " abhi: etc

NSDictionaryのsetObjectに従って、この順序で取得することはありません。

追加順序以外のソートされた順序で結果を取得したい場合。

次に、すべてのキーを配列[dict allKeys]として取得し、この配列を並べ替えて、ディクショナリからオブジェクトを取得できます。

NSMutableDictionary *dict=[NSMutableDictionary new];
[dict setObject:@"anoop" forKey:@"aKey"];
[dict setObject:@"john" forKey:@"jKey"];
[dict setObject:@"baban" forKey:@"bKey"];
[dict setObject:@"chandan" forKey:@"cKey"];

NSArray *keys=[dict allKeys];
NSArray *sortedKeys=[keys sortedArrayUsingSelector:@selector(compare:)];
for (NSString *key in sortedKeys) {
    NSLog(@"Key: %@, Value : %@",key,dict[key]);
}
于 2013-03-19T10:58:34.073 に答える
1

定義によると、辞書は順序付けされていません。既存の注文が同じままであると仮定することさえできません。

ディクショナリから配列を取得しallKeys、並べ替えてから、並べ替えられた配列を反復処理することでキーの値にアクセスできます。

于 2013-03-19T10:56:22.103 に答える
1

アイテムを特定の順序にする必要がある場合は、NSArray. ディクショナリ キーの順序は保証されません。

于 2013-03-19T10:55:33.137 に答える
1

このように鍵を取得できます...

NSArray *keys = [myDict allKeys];

次に、キーを並べ替え、並べ替えられたキー配列を反復処理して、値を順番に取得します。

于 2013-03-19T10:55:42.927 に答える
1

辞書のキーを配列で取得する

このキー配列を並べ替えます

この配列を使用して、辞書の値を取得します

于 2013-03-19T10:55:45.497 に答える