排序JSON对象的数组

时间:2017-12-15 17:28:23

标签: swift

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

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

例如

对象[ “状态”]

“新”= 1

“打开”= 2

“已关闭”= 3

///我需要在这里翻译一些

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

2 个答案:

答案 0 :(得分: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"]) }

答案 1 :(得分:0)

这是一种方式:

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

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