如何按值对NSMutableDictionary进行排序

时间:2014-07-18 23:45:51

标签: ios sorting nsmutabledictionary

我已经解决了这个问题。

我有NSMutableDictionary,其中Values是数字[1..n],而Keys是单词。 我想对这个字典和单词数量最多的单词进行排序。

我曾尝试过单词是值而数字是键,但在我的情况下它是不可能的,因为我的值中有相同的数字。

感谢大家的帮助

这是我试图编写的代码

- (void) method
{
    _fourWords = [[NSMutableArray alloc] init];
    NSArray * Keys = [_sentences allKeys];
    NSArray * valuesArray = [_sentences allValues];
    NSArray * sortedValuesArray = [valuesArray      sortedArrayUsingSelector:@selector(compare:)];
    NSArray * reverseVArray = [[sortedValuesArray reverseObjectEnumerator] allObjects];

    NSLog(@"%@",reverseVArray);
}

1 个答案:

答案 0 :(得分:0)

它并不完全清楚你想要什么,但似乎你想要一组按照它们所关联的数字排序的单词。以下代码执行此操作:

NSDictionary *dict = @{@"name" : @3, @"name2" : @2, @"name3" : @1};
NSMutableArray *array = [NSMutableArray new];
[dict enumerateKeysAndObjectsUsingBlock:^(id key, id obj, BOOL *stop) {
  [array addObject:@{@"string" : key, @"number" : obj}];
}];
[array sortUsingComparator:^NSComparisonResult(id obj1, id obj2) {
  return [obj1[@"number"] compare:obj2[@"number"]];
}];

然后你可以这样使用这个数组:

[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
  NSLog(@"String: %@", obj[@"string"]);
}];

或者把它变成一个只包含字符串的数组

NSMutableArray *strings = [NSMutableArray new];
[array enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) {
  [strings addObject:obj[@"string"]];
}];