2014-11-28 5 views
16

Я хочу отсортировать массив по двум параметрам, например, по имени, а затем по описанию. Сортировка массива сначала по имени, а затем по описанию не будет работать, потому что массив не будет сортироваться по имени.Сортировка массива по двум параметрам в swift

Решение должно быть что-то вроде этого:

var sortedArray = sorted(items, { (o1: MyObject, o2: MyObject) -> Bool in 
      return o1.name < o2.name and o1.description < o2.description 
     }) 

Благодаря

ответ

27

Ваш синтаксис выглядит правильно. Просто замените крышку на

return o1.name == o2.name ? (o1.description < o2.description) : (o1.name < o2.name) 

Если вы хотите получить более двух критериев сортировки, я рекомендую использовать старомодные дескрипторы сортировки.

let sortedArray = (unsortedArray as NSArray).sortedArrayUsingDescriptors([ 
    NSSortDescriptor(key: "name", ascending: true), 
    NSSortDescriptor(key: "description", ascending: true), 
    .... 
]) as! [Object] 
+0

Чтобы отсортировать поиск по имени, а затем по описанию. В противном случае он сортируется по обеим клавишам одновременно. –

+0

Нет повторений. Он должен сортироваться по 'name' (часть 3) и только по описанию (часть 2), когда имена равны (часть 1). – Mundi

+0

не могли бы вы рассказать мне, как выбрать третий сортировочный фильтр в списке? может заставить его работать только для двух – cmario

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