【问题标题】:How to sort array of custom objects by customised status value in swift 3?如何在swift 3中通过自定义状态值对自定义对象数组进行排序?
【发布时间】:2023-03-28 03:30:01
【问题描述】:

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

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

【问题讨论】:

标签: arrays sorting object swift3


【解决方案1】:

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

例如:

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

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

【讨论】:

  • 谢谢,我正是在寻找这个解决方案。
【解决方案2】:

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

然后用下面的代码排序,refor this 了解更多。

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

【讨论】:

  • 谢谢。但是这些方式怎么会按照打开、确认、关闭和取消排序呢?它怎么知道我想这样排序?
  • 这将通过比较这些字符串进行排序
【解决方案3】:

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-07-11
    • 2018-05-12
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多