如何在swift 3中按自定义状态值对自定义对象数组进行排序?

时间:2017-05-14 05:54:11

标签: arrays sorting object swift3

假设我们有一个名为orderFile的自定义类,该类包含三个属性。

class orderFile  {
    var name = String()
    var id = Int()
    var status = String()
}

其中很多都存储在数组中

var aOrders : Array = []

var aOrder = orderFile()
aOrder.name = "Order 1"
aOrder.id = 101
aOrder.status = "closed"
aOrders.append(aOrder)

var aOrder = orderFile()
aOrder.name = "Order 2"
aOrder.id = 101
aOrder.status = "open"
aOrders.append(aOrder)

var aOrder = orderFile()
aOrder.name = "Order 2"
aOrder.id = 101
aOrder.status = "cancelled"
aOrders.append(aOrder)

var aOrder = orderFile()
aOrder.name = "Order 2"
aOrder.id = 101
aOrder.status = "confirmed" 
aOrders.append(aOrder)

问题是:如何根据打开,确认,关闭和取消的状态对其进行排序?

3 个答案:

答案 0 :(得分:4)

在排序函数中进行比较时,您必须提供一个能产生适当排序的值。

例如:

extension orderFile
{    
    var statusSortOrder: Int 
        { return ["open","confirmed","closed","cancelled"].index(of: status) ?? 0 }
}

let sortedOrders = aOrders.sorted{$0.statusSortOrder < $1. statusSortOrder}

答案 1 :(得分:1)

在你的代码中,你应该创建一个数组,在每个aOrder定义时用aOrders.append(aOrder)存储每个aOrder。

然后使用以下代码对其进行排序,请重新 this

aOrders.sorted({ $0.status > $1.status })

答案 2 :(得分:0)

swift 3的答案如下:

升序:

aOrders = aOrders.sorted(by: 
                 {(first: orderFile, second: orderFile) -> Bool in
                   first.status > second.status
                 }
              )

降序:

aOrders = aOrders.sorted(by: 
                 {(first: orderFile, second: orderFile) -> Bool in
                   first.status < second.status
                 }
              )