我有一个字典,其键由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
)
哪个是乱序的。这是方法实现的错误还是存在另一个问题?
答案 0 :(得分:8)
也许你误解了keysSortedByValue:...
方法的作用。它不对键进行排序(为此您只需对allKeys
返回的数组进行排序),而是对值进行排序,然后将其顺序应用于键。
所以,假设你有以下词典:
{"Orange": 1, "Apple": 3, "Peach": 2}
结果将是:
"Orange", "Peach", "Apple"
因为它对应于值(1,2,3)的排序顺序。
答案 1 :(得分:4)
您可以使用sortedArrayUsingSelector:
NSArray *sortedArray = [[self.PlatformDict allKeys] sortedArrayUsingSelector:@selector(compare:)]
答案 2 :(得分:1)
用以下内容替换块的内部。这将告诉您比较方法或其他问题是否存在问题。
if ([obj1 integerValue] > [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedDescending;
}
if ([obj1 integerValue] < [obj2 integerValue]) {
return (NSComparisonResult)NSOrderedAscending;
}
return (NSComparisonResult)NSOrderedSame;