Сортировка массива в порядке возрастания - PullRequest
4 голосов
/ 13 апреля 2011

У меня есть массив, который содержит значения вроде 0,3,2,8 и т. Д. Я хочу отсортировать массив в порядке возрастания. Пожалуйста, скажите мне, как это сделать.

Заранее спасибо !!

Ответы [ 7 ]

15 голосов
/ 13 апреля 2011

Если ваш массив - NSArray, содержащий NSNumbers:

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, содержащим целые числа:

#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 голосов
/ 13 апреля 2011

Вам не нужен дескриптор сортировки, если ваш массив такой простой только с NSNumber s. Если это называется array, то

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

вернет новый массив, отсортированный в порядке возрастания, как вы хотите.

2 голосов
/ 13 апреля 2011
NSSortDescriptor *sortDescriptor;
sortDescriptor = [[[NSSortDescriptor alloc] initWithKey:nil
                                              ascending:YES] autorelease];
NSArray *sortDescriptors = [NSArray arrayWithObject:sortDescriptor];
NSArray *sortedArray;
sortedArray = [**YourArray** sortedArrayUsingDescriptors:sortDescriptors];
1 голос
/ 13 апреля 2011

Используйте код: [[myData allKeys]sortedArrayUsingSelector:@selector(psuedoNumericCompare:)];

myData - это ваш массив. Если вы используете эту строку в своем коде, она будет сортировать по размеру целого числа (и не по алфавиту, поэтому она будет сортироваться не по 1, 111, 2,322, 333, 4445, 45, 67, а по 1, 2, 45, 67, 111, 322, 333, 4445).

Исходный источник: Как разрешить sortedArrayUsingSelector использовать целое число для сортировки вместо String?

1 голос
/ 13 апреля 2011

У сортировки есть много решений, каждое с разной эффективностью.

Самым простым и естественным видом, на мой взгляд, является тип вставки. Перейдите на эту страницу и прокрутите вниз, чтобы посмотреть код. Сортировка вставок

Для более полного списка всех алгоритмов сортировки, проверьте эту страницу

0 голосов
/ 09 июля 2016

Попробуйте. Если у вас Array 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 голосов
/ 05 мая 2016

Вы можете отсортировать массив простым способом, используя sortUsingSelector код следующим образом.

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

Я думаю, что это самый простой способ без использования каких-либо дескрипторов.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...