在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.
答案 0 :(得分:76)
在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
,而不是sort
let sortedArray = myArray.sorted { $0.myDate < $1.myDate }
进行排序,现在只是sort
:
myArray.sort { $0.myDate < $1.myDate }
使用Swift 3的Date
类型,您可以使用<
运算符。
答案 1 :(得分:10)
如果要对原始自定义对象数组进行排序。这是在 Swift 2.1
中执行此操作的另一种方法var myCustomerArray = [Customer]()
myCustomerArray.sortInPlace {(customer1:Customer, customer2:Customer) -> Bool in
customer1.id < customer2.id
}
id
是整数。您也可以为<
使用相同的String
运算符。
通过查看示例,您可以了解有关其使用的更多信息: Swift2: Nearby Customers
答案 2 :(得分:0)
在swift 3.0中
我的假设与问题中提到的例子相同。
即customObject是带有变量myDate的MyObject。 MyObject的数组是myArray。我们可以这样排序。
myArray.sort(by: { (one: MyObject, two: MyObject) -> Bool in
one. myDate < two. myDate
})
答案 3 :(得分:-2)
sort现在是sortInPlace(或类似的东西),其参数与sort相同。