#arrays #swift #sorting
#массивы #swift #сортировка
Вопрос:
У меня есть объекты, которые находятся в массиве, который я хотел бы отсортировать
let person = Person()
person.isHome = true
person.firstname = "Foo"
person.surname = "Bar"
и т.д…
Я выбираю всех людей
guard let allPeople = controller.fetchedObjects as? Array<Person> else { return }
Теперь я хотел бы отфильтровать и отсортировать
var homeArray = allPeople
.filter { $0.isHome == true }
.sort { $0.surname < $1.surname }
Все в порядке… за исключением того, что, если мне нужны дополнительные дескрипторы сортировки, подобные этому…
var homeArray = allPeople
.filter { $0.isHome == true }
.sort { $0.surname < $1.surname }
.sort { $0.firstname < $1.firstname }
.sort { $0.isOut == true amp;amp; $1.isOut == false }
Я все еще хочу, чтобы они были упорядочены по фамилии, но я также хочу, чтобы они сортировались по имени после фамилии и были ранены выше, чем не пострадавшие… Каков синтаксис? Кажется, я нигде не могу его найти… Должен ли я вернуться к использованию NSArray?
Это так просто, как
.sort { ($0.isOut == true amp;amp; $1.isOut == false) amp;amp; ($0.firstname < $1.firstname) amp;amp; ($0.surname < $1.surname)}
Комментарии:
1. Изменение
fetchRequest
NSFetchedResultsController
которых намного эффективнее, чемmanual
фильтрация / сортировка2. Что, если я не могу изменить FRC? Я знаю, что это не имеет большого смысла, но ребята, с которыми я работаю, создают фреймворк, в котором я должен работать… Итак, я получаю allPeople, а затем я должен фильтровать и сортировать после выборки… Дело не в том, что нет лучшего способа сделать это … более того, мне нужен синтаксис для сортировки таким образом, но с несколькими свойствами
Ответ №1:
let new = [person,person1,person2,person3,person4]
var homeInArray = new
.filter { $0.isHome == true amp;amp; $0.isInjured == true }
var homeNINArray = new
.filter { $0.isHome == true amp;amp; $0.isInjured == false }
var newHomeArray = homeInArray.sort { $0.firstName < $1.firstName } homeNINArray.sort { $0.firstName < $1.firstName }
Попробуйте это решение…
Комментарии:
1. Извините, если я что-то перепутал с синтаксисом bool (что может быть неправильно) Я хочу сортировать не только по bools, но и по нескольким условиям.. Я также добавил имя
2. Это справедливый ответ на точную проблему, которую я представил, хотя so 1 .. но это не совсем то, что мне нужно знать