Подтвердить что ты не робот

Swift сортирует массив объектов на основе логического значения

Я ищу способ сортировки массива Swift на основе логического значения.

У меня есть работа с использованием приведения в NSArray:

var boolSort = NSSortDescriptor(key: "selected", ascending: false)
var array = NSArray(array: results)
return array.sortedArrayUsingDescriptors([boolSort]) as! [VDLProfile]

Но я ищу вариант Swift, любые идеи?

Обновление Благодаря Arkku мне удалось исправить это, используя следующий код:

return results.sorted({ (leftProfile, rightProfile) -> Bool in
    return leftProfile.selected == true && rightProfile.selected != true
})
4b9b3361

Ответ 1

Массивы Swift можно сортировать на месте с помощью sort или с новым массивом с sorted. Единственным параметром любой функции является замыкание, принимающее два элемента и возвращающее true, если первое упорядочено до второго. Самый короткий способ использовать параметры закрытия - это указать их как $0 и $1.

Например (чтобы сначала отсортировать истинные булевы):

// In-place:
array.sort { $0.selected && !$1.selected }

// To a new array:
array.sorted { $0.selected && !$1.selected }

(изменить: обновлено для Swift 3 и 4, ранее sort было sortInPlace и sorted было sort.)

Ответ 2

Стандартная библиотека Swifts предоставляет функцию с именем sorted, которая сортирует массив значений известного типа на основе вывода закрытия сортировки, которое вы предоставляете

reversed = sorted(array) { $0 > $1 }

reversed будет новый массив, который будет сортироваться в соответствии с условием, указанным в закрытии.

Ответ 3

Новый (для Swift 1.2)

return results.sort { $0.selected && !$1.selected }

Старый (для Swift 1.0)

Предполагая, что results имеет тип [VDLProfile], а VDLProfile имеет член Bool selected:

return results.sorted { $0.selected < $1.selected }

См. документацию для отсортировано