2012-06-02 48 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

相關問題