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

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.
4b9b3361

Ответ 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 (или что-то подобное) с теми же параметрами, что и сортировка.