使用NSLog显示的密钥顺序循环访问NSDictionary

时间:2013-10-22 09:12:14

标签: objective-c json nsdictionary

我收到NSDictionary低谷JSON。执行NSLog时,密钥顺序如下: 40617 40737 40946 41066 41306 。这是我想要的顺序,因为这些值是事先排序的。但是当循环到NSDictionary时,我得到以下顺序: 40617 41066 40737 40946 41306 。是否可以按照我在使用NSLog时看到的顺序获取它?

3 个答案:

答案 0 :(得分:4)

字典(地图)未分类。迭代它们时没有保证的顺序。您只能保证获得所有参赛作品。

因此,您需要获取密钥,按照您想要的方式对其进行排序,然后获取已排序密钥的值。

例如:

NSArray *keys = [myDictionary allKeys];
NSArray *sortedKeys = [keys sortedArrayUsingSelector:@selector(compare:)];

for (id key in sortedKeys) {
    id value = [myDictionary objectForKey:key];

    NSLog(@"%@ = %@", key, value);
}

答案 1 :(得分:2)

NSDictionary未按定义排序,因此在添加值时,它们不必一直是相同的顺序。如果您想要一个有序的集合,您应该使用NSArray

答案 2 :(得分:-1)

默认情况下,您没有该选项。你必须自定义。

http://www.cocoawithlove.com/2008/12/ordereddictionary-subclassing-cocoa.html