有关 NSArray 的排序问题

DenoStr 2018-06-14 05:01:41
我本来想给数组降序排序,调用了compare方法,可为啥跳进去的时候竟然是一个结构体?

NSArray *arr = @[@2134, @123, @111, @324, @414];
arr = [arr sortedArrayUsingSelector:@selector(compare:)];
NSEnumerator *enumerator = [arr reverseObjectEnumerator];
NSArray *arr1 = [[NSArray alloc] initWithArray:[enumerator allObjects]];
NSLog(@"%@", arr1);

而且这个地方为啥还需要使用枚举器?
...全文
986 1 打赏 收藏 转发到动态 举报
写回复
用AI写文章
1 条回复
切换为时间正序
请发表友善的回复…
发表回复
「已注销」 2018-06-15
  • 打赏
  • 举报
回复

NSArray *arr = @[@2134, @123, @111, @324, @414];
arr = [arr sortedArrayUsingSelector:@selector(compare:)];  // 默认为升序
NSEnumerator *enumerator = [arr reverseObjectEnumerator]; // 创建enumerator,将排序好的arr逆序
NSArray *arr1 = [[NSArray alloc] initWithArray:[enumerator allObjects]]; // 取出排序好的结果
如果你想一步到位,可以使用

- (NSArray<ObjectType> *)sortedArrayUsingComparator:(NSComparator NS_NOESCAPE)cmptr API_AVAILABLE(macos(10.6), ios(4.0), watchos(2.0), tvos(9.0));
可以自定义排序的条件及升降

// 数组降序
[arr sortedArrayUsingComparator:^NSComparisonResult(id  _Nonnull obj1, id  _Nonnull obj2) {
    NSNumber *tNumber1 = (NSNumber *)obj1;
    NSNumber *tNumber2 = (NSNumber *)obj2;
    if (tNumber1.intValue < tNumber2.intValue) { // 交换
        return NSOrderedDescending;
    } else {
        return NSOrderedAscending;  // 不交换
    }
}]

29,027

社区成员

发帖
与我相关
我的任务
社区描述
主要讨论与iOS相关的软件和技术
社区管理员
  • iOS
  • 大熊猫侯佩
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧