Как отсортировать NSArray с объектами - PullRequest
0 голосов
/ 12 декабря 2010

У меня есть NSArray объектов.Каждый объект имеет несколько свойств.

Например: NSArray oneArray имеет 5 объектов.Каждый объект имеет следующие свойства: name, address, ZIP_Code.

Как мне отсортировать NSArray по name?

Ответы [ 3 ]

4 голосов
/ 12 декабря 2010
NSSortDescriptor* dx = [[NSSortDescriptor alloc] initWithKey:@"name" ascending:YES];
NSSortDescriptor* dy = [[NSSortDescriptor alloc] initWithKey:@"address" ascending:NO selector:@selector(caseInsensitiveCompare:)];
[arr sortUsingDescriptors:[NSArray arrayWithObjects:dx, dy, nil]];
[dx release];
[dy release];

Взято из кода, опубликованного KennyTM.Отредактировано Джорданом, чтобы фактически работать;) Замените Array arr вашим массивом.Изменить, чтобы удовлетворить.

1 голос
/ 12 декабря 2010

Мне нравится ответ Джордана, потому что (1) я не знал о NSSortDescriptor и (2) он полезен для сортировки по нескольким свойствам.

Но я обычно создаю метод типа -(NSComparisionResult)compare:(MyClass*)otherObject в своем классе, затем использую -[myArray sortedArrayUsingSelector:@selector(compare:)]. Сам метод сравнения аналогичен ответу Джамхина, но я думаю, что он немного чище, потому что сам класс сравнивает объекты, а не отдельную функцию.

1 голос
/ 12 декабря 2010
    NSInteger nameSort(id obj1, id obj2, void *context)
    {
        NSComparisonResult result = [obj1.name compare:obj2.name];

        if (result == NSOrderedAscending) // stringOne < stringTwo
            return NSOrderedAscending;

        if (result == NSOrderedDescending) // stringOne > stringTwo
            return NSOrderedDecending;

        if (result == NSOrderedSame) // stringOne == stringTwo
            return NSOrderedSame;
    }
/*to sort oneArray*/ oneArray = [oneArray sortedArrayUsingFunction:nameSort context:NULL];
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...