按升序排序数组

时间:2011-04-13 13:13:48

标签: iphone objective-c sorting nsarray

我有一个包含0,3,2,8等值的数组。我想按递增顺序对数组进行排序。请告诉我如何执行此操作。

提前致谢!!

7 个答案:

答案 0 :(得分: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的其他方法:


如果你的数组是一个包含整数的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);
}

答案 1 :(得分:7)

如果您的数组仅使用NSNumber那么简单,则不需要排序描述符。如果它被称为array,那么

[array sortedArrayUsingSelector:@selector(compare:)];

将返回按升序排列的新数组,如您所愿。

答案 2 :(得分:2)

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

答案 3 :(得分:1)

排序有许多解决方案,每个解决方案都有不同的效率。

在我看来,最简单,最自然的一种是插入排序。转到此页面并向下滚动以查看代码。 Insertion sort

有关所有排序算法的更完整列表,check this page

答案 4 :(得分:1)

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

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

原始来源:How to let the sortedArrayUsingSelector using integer to sort instead of String?

答案 5 :(得分:0)

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

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

我认为这是不使用任何描述符的最简单方法。

答案 6 :(得分:0)

试试这个。如果你有像{1,10.11,12,2,23}那样的Array intArr

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;
    }];