更改 - [NSArray sortedArrayUsingComparator:]的排序顺序

Tim*_*Tim 18 sorting cocoa objective-c nsarray

我需要NSNumber从另一个生成一个排序的s 数组NSArray.我想用这个sortedArrayUsingComparator:方法.我在Apple文档中找到了这个例子:

NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {
    if ([obj1 integerValue] > [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedDescending;
    }

    if ([obj1 integerValue] < [obj2 integerValue]) {
        return (NSComparisonResult)NSOrderedAscending;
    }

    return (NSComparisonResult)NSOrderedSame;
}];
Run Code Online (Sandbox Code Playgroud)

这里我只是在块中提供比较器,这很好.排序本身 - 隐藏在我身上的一点,它使用了这个块 - 似乎是在提升.

我想知道我是否可以在此块外部请求不同的排序顺序,或者我是否只需要翻转<>(或NSOrderedXXX)s?

Lil*_*ard 24

如果你想对降序进行排序,那么只需翻转比较(或翻转NSComparisonResults).ascending:当你可以直接控制块中的参数时,不需要通过参数来膨胀API .


zap*_*aph 5

只需改变逻辑:

NSArray *sortedArray = [array sortedArrayUsingComparator: ^(id obj1, id obj2) {

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

 if ([obj1 integerValue] < [obj2 integerValue]) {
      return (NSComparisonResult)NSOrderedDescending;
 }
 return (NSComparisonResult)NSOrderedSame;
}];
Run Code Online (Sandbox Code Playgroud)

为了清楚起见,最好将此方法设置为名称类似于: 的方法decendingSort