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:)];