5

キーがsで構成されている辞書がありますNSNumber。私は次のように使用しkeysSortedByValueUsingComparatorています:

NSArray *sortedKeys = [self.platformDict  keysSortedByValueUsingComparator:^NSComparisonResult(id obj1, id obj2) {
        return [(NSNumber*)obj2 compare:(NSNumber*)obj1];
    }];

しかし、これが私が得た結果です:

(lldb) po sortedKeys
(NSArray *) $1 = 0x0704bd20 <__NSArrayI 0x704bd20>(
100000,
250000,
1000000,
500000,
3000000,
2000000,
5000000,
10000000
)

これは故障しています。これはメソッド実装のバグですか、それともここに別の問題がありますか?

4

3 に答える 3

9

keysSortedByValue:...メソッドの機能を誤解している可能性があります。キーをソートしませ(そのため、 によって返された配列をソートするだけですallKeys)。代わりに、値をソートしてから、その順序をキーに適用します。

たとえば、次の辞書があるとします。

{"Orange": 1, "Apple": 3, "Peach": 2}

結果は次のようになります。

"Orange", "Peach", "Apple"

これは、値のソート順 (1、2、3) に対応するためです。

于 2012-10-02T01:38:40.307 に答える
4

sortedArrayUsingSelector を使用できます。

NSArray *sortedArray = [[self.PlatformDict allKeys] sortedArrayUsingSelector:@selector(compare:)]
于 2012-10-02T01:45:10.213 に答える
1

ブロックの内部を次のものに置き換えます。これにより、compareメソッドに問題があるかどうかがわかります。

 if ([obj1 integerValue] > [obj2 integerValue]) {
      return (NSComparisonResult)NSOrderedDescending;
 }

 if ([obj1 integerValue] < [obj2 integerValue]) {
      return (NSComparisonResult)NSOrderedAscending;
 }
 return (NSComparisonResult)NSOrderedSame;
于 2012-10-02T01:30:00.393 に答える