1

我试图先按值排序和 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中对应的值

“适合”:5

“eblk”:5

“布雷布”:4

“演员”:4

“dstl”:2

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

我尝试先按键排序,然后按值排序,但这不起作用。

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

4

1 回答 1

3

你想要做的是一个两键排序。对于任何 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];
}];
于 2012-06-03T02:35:39.273 回答