什么是使用不同键对NSDictionary的NSArray进行排序的最佳方法,但是相同类型的值

时间:2013-06-30 01:48:14

标签: objective-c sorting nsarray nsdictionary

我正在努力寻找一种好方法来对这样的NSArray进行排序:

这是一个NSDictionary的数组,我用它来跟踪长字符串中每个单词的外观。所以它可能看起来像这样:

[{"hello", 5}, {"world", 10}, {"this", 1}, {"that", 3}]

现在我想按照值对NSDictionary进行排序,以便它看起来像这样:

[{"world", 10}, {"hello", 5}, {"that", 3}, {"this", 1}]

我查看了NSSortDescriptor和sortDesciptors的initWithKey方法,但它要求键的名称相同,这不适用于我的情况。

你建议我在这种情况下使用什么?提前谢谢!

2 个答案:

答案 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)

您的设计似乎与您的计划不符。内部集合不应该是字典。你没有从中获得任何东西,事实上它只是阻碍了你。要么使它们成为双元素数组,要么使外部集合成为一个字典,其中的单词为键,并完全删除嵌套。