我有一个结构数组,我希望根据存储为字符串的Double值从最高到最低排序。这是我目前的操作方式:
users.sort { (lhs, rhs) in return lhs.weekFTC > rhs.weekFTC }
这将根据第一个数字而不是完整的数字返回订单。有没有更好的方法可以做到这一点?
答案 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 }