我在理解这个 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 或 NSOrderedDescending
,但没有办法接收这些返回值。而且,这应该神奇地起作用?这个比较的文档很差。
最佳答案
我认为您对 keysSortedByValueUsingSelector:
的作用感到困惑。它按值 对字典条目进行排序,并按该顺序返回键。
您的字典包含这些条目:
Key Value
--- -----
1 mark
2 Joe
3 mdark
keysSortedByValueUsingSelector:
方法有效地按“值”列对该表进行排序:
Key Value
--- -----
2 Joe
1 mark
3 mdark
(请注意,Joe
按字母顺序在 mark
之前,而 mark
按字母顺序在 mdark
之前。)
然后它按照刚刚计算的顺序返回一个键数组:@[ @2, @1, @3 ]
。
请注意,keysSortedByValueUsingSelector:
从不比较键。它仅比较值。
如果你想通过键本身对键数组进行排序,只需这样做:
NSArray *dictToSortKeys = [dictToSort.allKeys
sortedArrayUsingSelector:@selector(compare:)];
关于ios - 对 nsdictionary 进行排序,它是如何工作的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17257582/