2012-06-02 104 views
1

我想按值排序和NSMutableDictionary,然后按键。我有下面的代码工作的排序值:对值和键进行NSMutableDictonary排序?

 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:相应的字典值

“APTS”:5

“eblk”:5

“屈曲约束耗能支撑”:4

“中投”:4

“DSTL”:2

我对价值的工作第一个排序,我只是不知道如何让基于关键次要排序开始。

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

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

+0

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

回答

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

我需要的确切解决方案。谢谢。 – AaronG

相关问题