12
NSArray* sortedArray = [myArray sortedArrayUsingSelector:@selector(compare:)];

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

4

3 回答 3

27

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

... 或者:

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

对不起。最重要的部分。

于 2012-11-07T16:31:57.773 回答
7

利用NSSortDescriptor

NSSortDescriptor* sortOrder = [NSSortDescriptor sortDescriptorWithKey: @"self" ascending: NO];
NSArray *temp = [myArray sortedArrayUsingDescriptors: [NSArray arrayWithObject: sortOrder]];
于 2012-11-07T16:33:41.887 回答
0

我喜欢使用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);
于 2021-03-01T03:53:57.893 回答