Сортировка NSMutableArray по свойству объекта - PullRequest
40 голосов
/ 09 августа 2011

Так что это довольно простой вопрос относительно лучшего способа сортировки NSMutableArray пользовательских объектов.

У меня есть NSMutableArray пользовательских объектов, каждый из которых имеет NSString и NSDate, которые идут вместе.Мне нужно отсортировать массив по новейшему объекту (так, самое последнее NSDate), и я почти уверен, что мог бы просто использовать NSDate compare: NSDate, если бы это был массив всего NSDate, но так как мне нужно, чтобы все объекты былисортировать, а не только дату, я не уверен, что смогу использовать этот метод.

В терминах псевдокода мне нужно: посмотреть на отдельный объект, определить, является ли текущий объект NSDateследующий по величине в массиве, и если это так, переместите объект, а не только дату.

Опять же, я даже не решался спросить об этом, так как это так просто, но я не хочу идтинаписание какого-то крайне неэффективного метода, если существует уже существующий метод класса, который по существу будет делать то, что я хочу, искать в массиве субсвойств объекта и сортировать объекты в соответствии с подвойствами.

Спасибо за любую помощь.

Ответы [ 2 ]

86 голосов
/ 09 августа 2011

NSSortDescriptors с сделать это действительно просто. С NSMutableArray вы можете сортировать существующий массив, используя sortUsingDescriptors:, а с неизменяемыми массивами вы создаете новый массив, используя sortedArrayUsingDescriptors:

.
//This will sort by stringProperty ascending, then dateProperty ascending
[mutable_array sortUsingDescriptors:
 @[
  [NSSortDescriptor sortDescriptorWithKey:@"stringProperty" ascending:YES],
  [NSSortDescriptor sortDescriptorWithKey:@"dateProperty" ascending:YES]
  ]];
19 голосов
/ 23 июля 2014

Этот маленький фрагмент отлично сработал для меня:

[students sortUsingDescriptors:@[[NSSortDescriptor sortDescriptorWithKey:@"name" ascending:YES]]];
...