Mic*_*ola 4 arrays sorting closures swift
如何在Swift中按多个条件对数组进行排序?例如,如下所示的字典数组:
items = [
[
"item":"itemA"
"status":"0"
"category":"B"
],[
"item":"itemB"
"status":"1"
"category":"C"
],[
"item":"itemC"
"status":"0"
"category":"A"
],[
"item":"itemD"
"status":"2"
"category":"A"
]
]
Run Code Online (Sandbox Code Playgroud)
这需要按如下方式排序:
我已经成功地整理这个数组基于任何条件1或2,但不能同时使用.以下是代码:
itemArray.sort({
$0["category"] < $1["category"])
})
Run Code Online (Sandbox Code Playgroud)
如何将其扩展为包含给定顺序中的多个排序标准?
Air*_*ity 11
您需要进行词典比较,即如果第一个字段相等,则比较第二个字段,否则比较第一个字段.
字典使它复杂化了一点,因为您不想将数据取出两次并且键可能丢失,但这实际上很好,因为==它<可以处理可选的比较.
let result = items.sorted {
switch ($0["category"],$1["category"]) {
// if neither “category" is nil and contents are equal,
case let (lhs,rhs) where lhs == rhs:
// compare “status” (> because DESC order)
return $0["status"] > $1["status"]
// else just compare “category” using <
case let (lhs, rhs):
return lhs < rhs
}
}
Run Code Online (Sandbox Code Playgroud)
实际上lexicographicCompare你可以在某些情况下使用它来进行比较 - 但是在这种情况下它不会起作用,因为a)选项,虽然它们可以与之比较<,但是不符合Comparable所以你必须检查nils手动,和b)您希望按降序对第二个条目进行排序.
| 归档时间: |
|
| 查看次数: |
4580 次 |
| 最近记录: |