按值重新组织字典顺序?

时间:2016-04-21 19:09:20

标签: ios objective-c nsdictionary nsmutabledictionary

我有一个从我的网络服务器接收Json文件的应用程序,我转换为NSDictionary,如下所示:

[NSJSONSerialization JSONObjectWithData:data options:0 error:&jsonError]

我字典的结构如下:

[0] => { "name" = "josh", meters = "8"  }
[1] => { "name" = "lina", meters = "10"  }
[2] => { "name" = "pall", meters = "21"  }

您可以看到数据已经由密钥meters组织,遗憾的是我的网络服务器无法维持开放连接,在这种情况下,新记录将通过 APNS(推送)通知)

假设通过以下方式发出以下记录:

{"name" = "oli", meters = "12"} 

我将它插入我的字典中,但是一旦完成,我怎样才能重新排列我的数组并按米排序?

2 个答案:

答案 0 :(得分:2)

字典中没有固有的顺序。你看到初始集中的排序是偶然的。

数组有排序,您可以通过发送allKeysallValues从字典中获取数组。

使用这个事实来组织字典,您可以尝试这样的事情:

NSArray *orderedPairs = [@[] mutableCopy];
for (id key in [someDictionary allKeys]) {
    [orderedPairs addObject:@[key, someDictionary[key]]];
}

[orderedPairs sortUsingComparator:^NSComparisonResult(NSArray *a, NSArray *b) {
    // return [a[0] compare:b[0]];  // to sort by key 
    return [a[1] compare:b[1]];  // to sort by value 
}];

请注意,这将导致数组 - 而不是字典 - 而是一个有序的数组。

答案 1 :(得分:0)

词典没有订单。它只是键值对。您可以获取特定键的值,因此不需要像数组一样排序或排序。