按升序排列数组

4
我有一个包含0、3、2、8等值的数组。我想按升序对数组进行排序。请告诉我如何做到。
提前感谢!
7个回答

15

如果你的数组是一个包含NSNumbers的NSArray:

NSArray *numbers = [NSArray arrayWithObjects:
                    [NSNumber numberWithInt:0],
                    [NSNumber numberWithInt:3],
                    [NSNumber numberWithInt:2],
                    [NSNumber numberWithInt:8],
                    nil];

NSSortDescriptor* sortDescriptor = [NSSortDescriptor sortDescriptorWithKey:nil ascending:YES selector:@selector(localizedCompare:)];
NSArray *sortedNumbers = [numbers sortedArrayUsingDescriptors:[NSArray arrayWithObject:sortDescriptor]];

需要记住的是,这只是对NSArray进行排序的一种方法。

还有其他几种对NSArray进行操作的方法,例如:


如果您的数组是包含int的c int数组:

#include <stdio.h>
#include <stdlib.h>
int array[] = { 0, 3, 2, 8 };
int sort(const void *x, const void *y) {
    return (*(int*)x - *(int*)y);
}
void main() {
    qsort(array, 10, sizeof(int), sort);
}

7
如果您的数组只包含NSNumber,那么您不需要一个排序描述符。如果它被命名为array,那么:
[array sortedArrayUsingSelector:@selector(compare:)];

将返回一个按升序排列的新数组,正如您所希望的那样。


2
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:nil
                                              ascending:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [**YourArray** sortedArrayUsingDescriptors:sortDescriptors];

1

排序问题有很多解决方案,每个方案的效率都不一样。

在我看来,最简单和自然的排序方法是插入排序。请访问此页面并向下滚动查看代码。插入排序

如果您想要查看所有排序算法的更完整列表,请查看此页面


1

使用以下代码:[[myData allKeys]sortedArrayUsingSelector:@selector(psuedoNumericCompare:)];

myData是您的数组。如果您在代码中使用该行,它将按整数大小排序(而不是按字母顺序排序,因此它不会像1, 111, 2,322, 333, 4445, 45, 67这样排序,而是像1, 2, 45, 67, 111, 322, 333, 4445)。

原始来源:如何让sortedArrayUsingSelector使用整数进行排序而不是字符串?


1
psuedoNumericCompare 不是 NSString 的一个方法,你需要自己添加它。 - James P

0

试试这个。如果你有一个名为 intArr 的数组,像这样 {1,10.11,12,2,23}

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

        if ([obj1 integerValue] == 0 && [obj2 integerValue] == 0)
        {
            return (NSComparisonResult)NSOrderedSame;
        }
        if ([obj1 integerValue] == 0)
        {
            return (NSComparisonResult)NSOrderedDescending;
        }
        if ([obj2 integerValue] == 0)
        {
            return (NSComparisonResult)NSOrderedAscending;
        }

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

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

0

您可以使用简单的方法使用sortUsingSelector对数组进行排序,代码如下。

[array sortUsingSelector:@selector(compare:options:)];
NSLog(@"array after sort in max:%@",array);

我认为这是最简单的方法,而没有使用任何描述符。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接