Вопрос

У меня есть массив, давайте назовем его «массивом», и внутри массива у меня есть такие объекты, как это:

"0 Вот объект"

"4 Вот еще один объект"

"2 Давайте поставим 2 тоже!"

"1 Какого черта, вот еще!"

"3 Давайте поместим это прямо здесь"

Я хотел бы сортировать массивы по этому номеру, так что это превратится в это:

"0 Вот объект"

"1 Какого черта, вот еще!"

"2 Давайте поставим 2 тоже!"

"3 Давайте поместим это прямо здесь"

"4 Вот еще один объект"

Это было полезно?

Решение

Вы можете использовать NSArray's SortedArrayusingFunction: контекст: Метод, чтобы сортировать их для вас. Этот метод принимает функцию, которую можно использовать для сравнения двух элементов в массиве.

#import <Foundation/Foundation.h>

NSInteger firstNumSort(id str1, id str2, void *context) {
    int num1 = [str1 integerValue];
    int num2 = [str2 integerValue];

    if (num1 < num2)
        return NSOrderedAscending;
    else if (num1 > num2)
        return NSOrderedDescending;

    return NSOrderedSame;
}

int main (int argc, const char * argv[]) {
    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];

    NSArray *array = [NSArray arrayWithObjects:@"0 Here is an object",
                      @"4 Here's another object",
                      @"25 Let's put 2 here too!",
                      @"1 What the heck, here's another!",
                      @"3 Let's put this one right here",
                      nil];

    NSLog(@"Sorted: %@", [array sortedArrayUsingFunction:firstNumSort context:NULL]);

    [pool drain];
    return 0;
}

Другие советы

Использовать sortedArrayUsingFunction: или же sortedArrayUsingComparator:, и передайте функцию или блок, который отправляет compare:options: к одной из строк, используя NSNumericSearch вариант.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top