0

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

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:等

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

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

如果您需要按特定顺序排列项目,则应使用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 回答
1

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

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

于 2013-03-19T10:56:22.103 回答