【问题标题】:Sort Array of JSON objects排序 JSON 对象数组
【发布时间】:2017-12-16 01:56:13
【问题描述】:

我需要对 JSON 对象数组进行排序。

但需要从字面意思翻译成数字意思。

例如

对象[“状态”]

“新”= 1

“打开”=2

“关闭”= 3

/// 我这里需要翻译一下

var sortedOrders = orders.sort { $0["status"].doubleValue < $1["status"].doubleValue  }

【问题讨论】:

    标签: swift


    【解决方案1】:

    你可以用枚举来做到这一点。

    enum Status: Int {
        case new = 1
        case open = 2
        case closed = 3
        case unknown = 99
    
        init(string: String) {
            switch string {
            case "new", "New": self = .new
            case "open", "Open": self = .open
            case "closed", "Closed": self = .closed
            default:
                self = .unknown
            }
        }
    }
    

    要使用枚举,你可以这样初始化:

    var myStatus = Status(string: object["status"])
    

    并像这样使用它:

    print(myStatus) // prints "new"
    print(myStatus.rawValue) // prints "1"
    

    编辑:由于枚举具有 Int 的基础类型,为了完成您的排序,您可以直接比较结果状态(感谢这个问题 https://stackoverflow.com/a/27871946/1718685):

    var sortedOrders = orders.sort { Status(string: $0["status"]) < Status(string: $1["status"]) }
    

    【讨论】:

    • 我比我更喜欢这个实现。我最终创建了一个函数来“转换”为数值。
    【解决方案2】:

    这是一种方法:

    let statuses = [ "New", "Open", "Closed" ]
    var sortedOrders = orders.sort { (statuses.index(of: $0["status"] ?? "") ?? 99) < (statuses.index(of: $1["status"] ?? "") ?? 99) }
    

    这将确定statuses 数组中每个状态的索引。 99 将用于未知或缺失状态,因此任何未知状态都将显示在列表末尾。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-09-03
      • 2020-06-07
      • 2021-05-19
      • 1970-01-01
      相关资源
      最近更新 更多