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

4

假设我们有一个自定义类名为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)

问题是:如何根据开启、确认、关闭和取消的状态对它们进行排序?

1
请参考此帖子 - LF00
3个回答

9

您需要提供一个值,以便在排序函数中比较时产生适当的排序顺序。

例如:

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

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

谢谢,我正需要这个解决方案。 - Chowdhury Md Rajib Sarwar
目前最佳解决方案,清晰明了。 - Nilay Dagdemir

2
在您的代码中,您应该创建一个数组来存储每个aOrder,并在每个aOrder定义时使用aOrders.append(aOrder)进行存储。然后可以使用以下代码对其进行排序,更多信息请参考此处
aOrders.sorted({ $0.status > $1.status })

谢谢。 但是,这些方式如何按照开放、确认、关闭和取消排序?它怎么知道我想要这样排序? - Chowdhury Md Rajib Sarwar
这将通过比较这些字符串进行排序。 - LF00

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
                 }
              )

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接