2016-10-20 3 views
3

У меня есть массив, который имеет два типа объектов: Награжден и не присужден. Я просто хочу отсортировать массив так, чтобы присваиваемые объекты были помещены первыми, а остальные были помещены впоследствии.Как отсортировать массив на основе ключа?

Вот код, который определяет ключ «присуждаемый»:

if let awarded = achievements[indexPath.row].userRelation["awarded"] as? String where awarded != "<null>" { } 

В пределах этих скобок, я хотел бы использовать свое развернутое значение «присуждаемое» перебирать достижения и добавить их к началу, а остальное - в конце.

Как бы я это сделал?

+0

Что такое «достижение» здесь? Является ли это объектом, который содержит словарь 'userRelation' ? Тип странной модели сущности:/ – alexburtnik

+0

Да, он содержит кучу свойств, один из которых - пользовательский реестр, который имеет «награжденный» ключ –

+0

var descriptor = NSSortDescriptor (ключ: «награжден», по возрастанию: false) var stories = (достижения как NSArray) .sortedArray (usingDescriptors: [дескриптор]) –

ответ

2

Вы должны поэкспериментировать с функцией sort, это очень полезно.

let sortedAchievements = achievements.sorted{ $0.userRelation["awarded"] < $1.userRelation["awarded"] } 

Для сортировки в месте использования этого:

achievements.sort{ $0.userRelation["awarded"] < $1.userRelation["awarded"] } 

Я рекомендовал бы, чтобы реорганизовать свою модель. Лучше использовать объекты или структуры вместо словарей. Также awarded должно быть Bool собственности, а не String, правильно?

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