Swift 2.0 按属性对对象数组进行排序
Posted
技术标签:
【中文标题】Swift 2.0 按属性对对象数组进行排序【英文标题】:Swift 2.0 Sorting Array of Objects by Property 【发布时间】:2015-07-30 16:32:33 【问题描述】:在 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
,而不是sort
let sortedArray = myArray.sorted $0.myDate < $1.myDate
就地排序,现在只是sort
:
myArray.sort $0.myDate < $1.myDate
对于 Swift 3 的 Date
类型,您可以使用 <
运算符。
【讨论】:
字符串排序示例 let myArray = ["Zen", "Step 12", "Apple"] let sortedArray = myArray.sort( x, y in return x.localizedStandardCompare(y) == NSComparisonResult.OrderedAscending ) 转储(sortedArray) Swift 3 版本运行良好。我怀疑您的代码还有其他问题。如果您仍然遇到问题,请在 Stack Overflow 上发布您自己的新问题reproducible example of your problem。【参考方案2】:如果要对自定义对象的原始数组进行排序。这是 Swift 2.1
中的另一种方法var myCustomerArray = [Customer]()
myCustomerArray.sortInPlace (customer1:Customer, customer2:Customer) -> Bool in
customer1.id < customer2.id
id
是一个整数。您也可以对 String
使用相同的 <
运算符。
您可以通过查看此处的示例来了解有关其使用的更多信息: Swift2: Nearby Customers
【讨论】:
我认为这也可以更短。使用 $0 和 $1【参考方案3】:在 swift 3.0 中
我的假设与问题中的示例相同。
即 customObject 是带有变量 myDate 的 MyObject。 MyObject的数组是myArray。我们可以这样简单的排序。
myArray.sort(by: (one: MyObject, two: MyObject) -> Bool in
one. myDate < two. myDate
)
【讨论】:
【参考方案4】:sort 现在是 sortInPlace(或类似的东西),具有与 sort 相同的参数。
【讨论】:
以上是关于Swift 2.0 按属性对对象数组进行排序的主要内容,如果未能解决你的问题,请参考以下文章