通过字符串double快速排序结构数组

时间:2019-04-02 08:17:29

标签: swift

我有一个结构数组,我希望根据存储为字符串的Double值从最高到最低排序。这是我目前的操作方式:

users.sort { (lhs, rhs) in return lhs.weekFTC > rhs.weekFTC }

这将根据第一个数字而不是完整的数字返回订单。有没有更好的方法可以做到这一点?

2 个答案:

答案 0 :(得分:2)

您可以将weekFTC字符串转换为Double,然后进行比较,如下所示:

users.sort { (lhs, rhs) -> Bool in
    let lhsVal = Double(lhs.weekFTC) ?? 0
    let rhsVal = Double(rhs.weekFTC) ?? 0

    return lhsVal > rhsVal
}

直接比较字符串会进行字典比较。

示例:

var array = ["111", "e3", "22"]

array.sort { (lhs, rhs) -> Bool in
    return lhs > rhs
}
print(array) //["e3", "22", "111"]

因此,我们应该查看字符串是否可以制成数字并然后进行排序。
这次它将进行数值比较,如下所示:

var array = ["111", "e3", "22"]

array.sort { (lhs, rhs) -> Bool in
    let lhs = Double(lhs) ?? 0
    let rhs = Double(rhs) ?? 0
    return lhs > rhs
}
print(array) //["111", "22", "e3"]

答案 1 :(得分:1)

使用能够处理数字字符串的比较器

users.sort { $0.weekFTC.compare($1.weekFTC, options: .numeric) == .orderedDescending }