Swift 2.0 Сортировка массива объектов по свойствам
В Swift 2.0, как вы собираетесь сортировать массив пользовательских объектов по свойству? Я знаю в Swift 1.2, это было сделано с помощью sorted() и sort(). Однако эти методы больше не работают в Xcode 7 beta 4. Спасибо!
Например:
class MyObject: NSObject {
var myDate : NSDate
}
...
let myObject1 : MyObject = MyObject() //same thing for myObject2, myObject3
var myArray : [MyObject] = [myObject1, myObject2, myObject3]
//now, I want to sort myArray by the myDate property of MyObject.
Ответы
Ответ 1
В Swift 2:
-
Вы можете использовать метод sort
, используя compare
для сравнения двух дат:
let sortedArray = myArray.sort { $0.myDate.compare($1.myDate) == .OrderedAscending } // use `sorted` in Swift 1.2
-
Или, если вы хотите отсортировать исходный массив, вы можете sortInPlace
:
myArray.sortInPlace { $0.myDate.compare($1.myDate) == .OrderedAscending } // use `sort` in Swift 1.2
В Swift 3:
-
чтобы вернуть отсортированное представление массива, используйте sorted
, not sort
let sortedArray = myArray.sorted { $0.myDate < $1.myDate }
-
для сортировки на месте, теперь просто sort
:
myArray.sort { $0.myDate < $1.myDate }
И с типом Swift 3 Date
вы можете использовать оператор <
.
Ответ 2
Если вы хотите отсортировать исходный массив пользовательских объектов. Вот еще один способ сделать это в Swift 2.1
var myCustomerArray = [Customer]()
myCustomerArray.sortInPlace {(customer1:Customer, customer2:Customer) -> Bool in
customer1.id < customer2.id
}
Где id
- целое число. Вы можете использовать тот же оператор <
для String
.
Вы можете узнать больше о его использовании, посмотрев пример:
Swift2: Клиенты поблизости
Ответ 3
В быстрой версии 3.0
Я принял предположение так же, как пример, заданный в вопросе.
i.e customObject - это MyObject с переменной myDate. Массив MyObject - myArray. Мы можем просто сортировать это.
myArray.sort(by: { (one: MyObject, two: MyObject) -> Bool in
one. myDate < two. myDate
})
Ответ 4
sort теперь sortInPlace (или что-то подобное) с теми же параметрами, что и сортировка.