首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >更改-[NSArray sortedArrayUsingComparator:]的排序顺序

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

Stack Overflow用户
提问于 2011-11-09 01:54:52
回答 4查看 18.2K关注 0票数 18

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

代码语言:javascript
复制
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;
}];

在这里,我只是在一个块中提供比较器,这很好。排序本身--对我隐藏的部分,使用这个块--看起来是升序的。

我想知道我是否可以在这个NSOrderedXXX块之外请求一个不同的排序顺序,或者我只需要颠倒<>(或NSOrderedXXX)的排序顺序?

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2011-11-09 02:01:53

如果您想要降序排序,那么只需翻转比较(或翻转NSComparisonResult)。当您可以在块中直接控制时,不需要通过使用ascending:参数来膨胀API。

票数 24
EN

Stack Overflow用户

发布于 2011-11-09 02:02:06

只需更改逻辑:

代码语言:javascript
复制
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;
}];

为清楚起见,最好将此方法命名为类似于:decendingSort的方法。

票数 4
EN

Stack Overflow用户

发布于 2011-11-09 02:02:22

来自-sortedArrayUsingComparator:的文档:

返回一个数组,该数组按给定NSComparator块指定的比较方法确定的升序列出接收数组的元素。

所以你不得不求助于使用

代码语言:javascript
复制
- (NSArray *)sortedArrayUsingDescriptors:(NSArray *)sortDescriptors

当然,这意味着首先滚动您自己的NSSortDescriptor对象,这可能正好适合您的目的。

票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/8054921

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档