按键顺序遍历字典

时间:2013-03-19 10:52:50

标签: objective-c nsdictionary nsmutabledictionary

我使用以下语法打印字典:

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

但我注意到,oeder不符合索引。比如说。如果我的字典是

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

上述代码不会以随机顺序打印出1,2,3,4号的值。

如何使用枚举代码来遍历该字典,就像上面指定的那样。我使用的关键是一个字符串,如“ajay”“abhi:etc

编辑:将密钥复制到另一个阵列是不可避免的?这是唯一的方法。

5 个答案:

答案 0 :(得分: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]获取,然后对该数组进行排序,然后从字典中检索Object。

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]);
}

答案 1 :(得分:1)

如果您需要按特定顺序排列项目,则应使用NSArray。字典键的顺序无法保证。

答案 2 :(得分:1)

你可以得到像这样的钥匙......

NSArray *keys = [myDict allKeys];

然后对键进行排序并迭代已排序的键数组以按顺序获取值。

答案 3 :(得分:1)

检索数组中的字典键

对此键数组进行排序

使用此数组检索词典值

答案 4 :(得分:1)

根据定义,字典不是有序的。您甚至不能假设现有订单保持不变。

您可以从字典中获取allKeys数组,对其进行排序,然后通过迭代排序的数组来访问键的值。