【问题标题】:Sorting NSMutableDictonary on Value AND Key?根据值和键对 NSMutableDictionary 进行排序?
【发布时间】:2012-06-07 15:49:09
【问题描述】:

我试图先按值排序和 NSMutableDictionary,然后按键。我使用下面的代码按值排序:

       NSMutableDictionary *dict = [[NSMutableDictionary alloc]initWithCapacity:10];
        [dict setObject:[NSNumber numberWithInt:5] forKey:@"eblk"];
        [dict setObject:[NSNumber numberWithInt:2] forKey:@"dstl"];
        [dict setObject:[NSNumber numberWithInt:4] forKey:@"cast"];
        [dict setObject:[NSNumber numberWithInt:4] forKey:@"breb"];
        [dict setObject:[NSNumber numberWithInt:5] forKey:@"apts"];

         NSArray *sortedKeys = [dict keysSortedByValueUsingComparator: ^(id obj1, id obj2) 
        {
          if ([obj1 integerValue] < [obj2 integerValue]) {
              return (NSComparisonResult)NSOrderedDescending;
          }
          if ([obj1 integerValue] > [obj2 integerValue]) {
              return (NSComparisonResult)NSOrderedAscending;
          }
          return (NSComparisonResult)NSOrderedSame;
        }];

然后我想根据键再次排序,所以我最终得到了一个这样的键数组:

sortedKeys : dict中对应的值

"apts": 5

“eblk”:5

“布雷布”:4

“演员”:4

“dstl”:2

我有第一个值排序,我只是不确定如何开始基于键的第二个排序。

我尝试先按键排序,然后按值排序,但没有奏效。

任何帮助将不胜感激。谢谢。

【问题讨论】:

  • 为什么要对字典进行排序?字典是无序的集合,因此即使您对键或值进行排序,如果您记录字典,它们也不一定按该顺序排列。

标签: objective-c ios nsarray nsmutabledictionary


【解决方案1】:

您正在尝试做的是两键排序。对于任何 n 键排序,您按顺序比较键,如果当前对不相等则返回结果,否则移动到下一对键并重复。

你的两个键的轮廓草图:

  1. 获取一个键数组,以便对它们进行排序
  2. 使用两键排序对该数组进行排序:

    • 通过查找获取值
    • 比较值,如果不相等则返回
    • 比较键;

代码草图:

NSArray *allKeys = [dict allKeys];
NSArray *sortedKeys = [allKeys sortedArrayUsingComparator:^(id obj1, id obj2)
{
   NSInteger value1 = [[dict objectForKey:obj1] integerValue];
   NSInteger value2 = [[dict objectForKey:obj2] integerValue];

   if (value1 < value2) 
      return (NSComparisonResult)NSOrderedDescending;
   if (value1 > value2) 
      return (NSComparisonResult)NSOrderedAscending;
   // values are equal, compare keys...         
   return [obj1 compare:obj2];
}];

【讨论】:

  • 我需要的确切解决方案。谢谢。
猜你喜欢
  • 2015-06-03
  • 2011-09-26
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-09-29
  • 1970-01-01
  • 1970-01-01
  • 2013-05-14
相关资源
最近更新 更多