我不得不对数组进行多重排序,但它不起作用
这是预期输出。现在此数组混淆了
struct Variant {
var name: String
var count: Int
}
let array = [
Variant(name: "Ab", count: 12),
Variant(name: "Ac", count: 10),
Variant(name: "Ad", count: 8),
Variant(name: "Ae", count: 0)
Variant(name: "Bc", count: 55),
Variant(name: "Bd", count: 45)]
我试着这样做,但它使计数优先,并不关心名称
array = array.sorted(by: {
($0.count ?? 0, $1.name) > ($1.count ?? 0, $0.name)
})
2条答案
按热度按时间blmhpbnm1#
元组比较是按多个标准对元素进行排序的好方法,但是您弄错了元组元素的顺序。
元组以“字典顺序”进行比较,从第一个(最左边)元素开始。为了首先按名称排序,
$0.name
和$1.name
必须是第一个元组元素。因此,首先按名称(升序)排序,然后按计数(降序)排序,排序函数应为
kq4fsx7k2#
要基于多个条件进行排序,只需包含基于优先级相互级联的条件。
编辑:感谢Martin R指出错误,以下是修改后的代码:
输入:
排序后: