我使用以下语法打印字典:
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
编辑:将密钥复制到另一个阵列是不可避免的?这是唯一的方法。
答案 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
数组,对其进行排序,然后通过迭代排序的数组来访问键的值。