我正在努力寻找一种好方法来对这样的NSArray
进行排序:
这是一个NSDictionary
的数组,我用它来跟踪长字符串中每个单词的外观。所以它可能看起来像这样:
[{"hello", 5}, {"world", 10}, {"this", 1}, {"that", 3}]
现在我想按照值对NSDictionary
进行排序,以便它看起来像这样:
[{"world", 10}, {"hello", 5}, {"that", 3}, {"this", 1}]
我查看了NSSortDescriptor
和sortDesciptors的initWithKey
方法,但它要求键的名称相同,这不适用于我的情况。
你建议我在这种情况下使用什么?提前谢谢!
答案 0 :(得分:4)
也许不是最有效的方式,但这样做
NSArray * d = @[@{@"world": @10}, @{@"hello": @5}, @{@"that": @3}, @{@"this": @1}];
[d sortedArrayUsingComparator:^NSComparisonResult(NSDictionary * obj1, NSDictionary * obj2) {
NSNumber * v1 = obj1[[obj1 allKeys][0]];
NSNumber * v2 = obj2[[obj2 allKeys][0]];
return [v1 compare:v2];
}];
无论如何,数据组织不太适合这项任务。由于内部数据结构是字典,因此收集值非常麻烦。您可以考虑将内部数组作为数组。
答案 1 :(得分:3)
您的设计似乎与您的计划不符。内部集合不应该是字典。你没有从中获得任何东西,事实上它只是阻碍了你。要么使它们成为双元素数组,要么使外部集合成为一个字典,其中的单词为键,并完全删除嵌套。