5

我有一本字典,其键由NSNumbers 组成。我使用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
)

这是不正常的。这是方法实现的错误还是这里有其他问题?

4

3 回答 3

9

也许您误解了该keysSortedByValue:...方法的作用。它不对键进行排序(因为您只需对返回的数组进行排序allKeys),而是对值进行排序,然后将它们的顺序应用于键。

因此,假设您有以下字典:

{"Orange": 1, "Apple": 3, "Peach": 2}

结果将是:

"Orange", "Peach", "Apple"

因为这对应于值的排序顺序 (1, 2, 3)。

于 2012-10-02T01:38:40.307 回答
4

您可以只使用 sortedArrayUsingSelector:

NSArray *sortedArray = [[self.PlatformDict allKeys] sortedArrayUsingSelector:@selector(compare:)]
于 2012-10-02T01:45:10.213 回答
1

用以下内容替换块的内部。这将告诉您比较方法或其他方法是否存在问题。

 if ([obj1 integerValue] > [obj2 integerValue]) {
      return (NSComparisonResult)NSOrderedDescending;
 }

 if ([obj1 integerValue] < [obj2 integerValue]) {
      return (NSComparisonResult)NSOrderedAscending;
 }
 return (NSComparisonResult)NSOrderedSame;
于 2012-10-02T01:30:00.393 回答