sortingnsdictionary,它是如何工作的?

我在理解compare-using-selector背后的逻辑时遇到了一些麻烦。

我有下面的代码,我试图提取键和sorting他们在同一时间。 但是,它不sorting。 输出NSArray的顺序不会改变,不pipe我做什么。

 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:function工作。 它说它返回NSOrderedAscending, NSOrderedSame or NSOrderedDescending ,但是没有办法接收这些返回。 而且,这应该是神奇的工作? 这个比较的文档相当糟糕。

我想你是什么keysSortedByValueUsingSelector:做的困惑。 它按sorting字典条目,并按顺序返回键。

你的字典包含这些条目:

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

keysSortedByValueUsingSelector:方法通过“值”列有效地对该表进行sorting:

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

(请注意, Joe在按照字母顺序排列之前,按照字母顺序mdark

然后它按照刚刚计算的顺序返回一个键的数组: @[ @2, @1, @3 ]

请注意keysSortedByValueUsingSelector:从不比较键。 它只是比较值。

如果你想按键自己sorting的关键数组,只要这样做:

 NSArray *dictToSortKeys = [dictToSort.allKeys sortedArrayUsingSelector:@selector(compare:)];