0

このことの背後にあるロジックを理解するのに苦労していcompare-using-selectorます。

次のコードがあります。キーを抽出して同時に並べ替えようとしています。しかし、それはソートされません。出力 NSArray の順序は、何をしても変わりません。

NSMutableDictionary *dictToSort = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"Joe", [NSNumber numberWithInt:2], @"mark", [NSNumber numberWithInt:1], @"mdark", [NSNumber numberWithInt:3], nil];

NSArray *dictToSortKeys = [dictToSort keysSortedByValueUsingSelector:@selector(compare:)];

NSLog(@"Not Sorted" );

NSNumber *xx = dictToSortKeys[0];
NSNumber *xy = dictToSortKeys[1];
NSNumber *xz = dictToSortKeys[2];
NSLog(@"Sorted %d %d %d", xx.integerValue , xy.integerValue, xz.integerValue);

compare:この機能の仕組みがわかりません。返品と書いてありますがNSOrderedAscending, NSOrderedSame or NSOrderedDescending、これらの返品を受け取る方法はありません。また、これは魔法のように機能するはずですか?この比較のドキュメントは非常に貧弱です。

4

1 に答える 1

8

私はあなたが何をするかについて混乱していると思いますkeysSortedByValueUsingSelector:。ディクショナリ エントリをで並べ替え、その順序でキーを返します。

辞書には次のエントリが含まれています。

Key Value
--- -----
 1  mark
 2  Joe
 3  mdark

このkeysSortedByValueUsingSelector:メソッドは、そのテーブルを「値」列で効果的に並べ替えます。

Key Value
--- -----
 2  Joe
 1  mark
 3  mdark

Joe(はアルファベット順で前markmarkはアルファベット順でより前であることに注意してくださいmdark。)

次に、計算された順序でキーの配列を返します@[ @2, @1, @3 ]

keysSortedByValueUsingSelector:キーを比較しないことに注意してください。値のみを比較します。

キー配列をキー自体で並べ替えたい場合は、次のようにします。

NSArray *dictToSortKeys = [dictToSort.allKeys
    sortedArrayUsingSelector:@selector(compare:)];
于 2013-06-23T04:09:01.037 に答える