3

我正在努力寻找一种NSArray像这样排序的好方法:

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

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

现在我想NSDictionary按值对其进行排序,使其看起来像这样:

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

我已经查看了 sortDescriptorsNSSortDescriptorinitWithKey方法,但它要求键的名称相同,这不适用于我的情况。

你建议我在这种情况下使用什么?先感谢您!

4

2 回答 2

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];
}];

无论如何,数据组织不是很适合这项任务。由于内部数据结构是字典,因此收集值相当麻烦。您可以考虑将内部设置为数组。

于 2013-06-30T01:55:45.037 回答
3

您的设计似乎与您的计划不符。内部集合不应该是这里的字典。你并没有从中获得任何好处,事实上它只是妨碍了你。要么使它们成为二元素数组,要么使外部集合成为以单词为键的字典并完全放弃嵌套。

于 2013-06-30T01:57:15.597 回答