【问题标题】:Sorting an NSArray in reverse order以相反的顺序对 NSArray 进行排序
【发布时间】:2012-11-07 16:27:58
【问题描述】:
NSArray* sortedArray = [myArray sortedArrayUsingSelector:@selector(compare:)];

只是想知道如何按降序对这个数字数组进行排序?

【问题讨论】:

  • 好问题。我不知道那个。
  • ^为什么说“Idk”的评论收到了赞成票?啊,到底是什么,我要加入 +1

标签: objective-c ios xcode


【解决方案1】:

使用允许您将块作为比较器传递的方法并实现反转对象的比较器(为 NSOrderedDescending 返回 NSOrderedAscending,反之亦然)....

... 或:

NSArray *reversed = [[[myArray sortedArrayUsingSelector:@selector(compare:)] reverseObjectEnumerator] allObjects];

对不起。 Derped 最重要的部分。

【讨论】:

  • 没有代码的注释是合理的,但是这个答案中给出的代码行只是反转了数组。实际上没有进行排序。最好明确说明应该在排序后的数组上调用它。
  • 耶。我破坏了原来的表达方式。
【解决方案2】:

使用NSSortDescriptor

NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self" ascending: NO];
NSArray *temp = [myArray sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]];

【讨论】:

    【解决方案3】:

    我喜欢使用sortedArrayUsingFunction: 方法,它可以完全控制数组的排序方式。然后将结果反转返回您将返回的负值。

    NSInteger myCompare (id obj1, id obj2, void *context) {
        int retval = [obj1 compare:obj2 options:NSNumericSearch];
        retval = -retval; // now it's sorted reverse
        return retval;
    }
    
    ...
    
    NSArray *arr = @[@"foo20zz", @"foo7zz", @"foo100zz"];
    NSArray *sarr = [arr sortedArrayUsingFunction:myCompare context:NULL];
    NSLog(@"sarr is %@", sarr);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2018-11-11
      • 1970-01-01
      • 2013-08-07
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多