2010-12-11 3 views
0

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

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

Как я могу сортировать NSArray, по name?

+0

duplicate? http://stackoverflow.com/questions/2849911/sorting-a-nsarray –

ответ

4
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 вашим массивом. Модифицируйте в соответствии.

+0

+1 обратите внимание, что это работает только в том случае, если 'arr' является' NSMutableArray'. Если 'arr' является' NSArray', тогда вы должны использовать '-sortedArrayUsingDescriptors:' и фиксировать возвращаемое значение. –

+0

Исправить. Спасибо Дэйву. – Jordan

1
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]; 
+0

Те, которые не нужны, просто верните «результат». – dreamlax

1

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

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

+0

+1 за ваш ответ! Ваша идея тоже замечательная. Это похоже на Comparator в Java! –

Смежные вопросы