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

値の最初の並べ替えが機能していますが、キーに基づいて2番目の並べ替えを開始する方法がわかりません。

最初にキーで、次に値でソートしようとしましたが、うまくいきませんでした。

どんな助けでも大歓迎です。ありがとう。

4

1 に答える 1

3

あなたがやろうとしているのは、2つのキーの並べ替えです。n-key ソートでは、キーを順番に比較し、現在のペアが等しくない場合は結果を返し、そうでない場合は次のキーのペアに移動して繰り返します。

2 つのキーのアウトライン スケッチ:

  1. ソートできるようにキーの配列を取得します
  2. 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 に答える