数组 – Swift对具有多个排序条件的数组进行排序
发布时间:2020-12-14 04:50:00 所属栏目:百科 来源:网络整理
导读:参见英文答案 How do I sort an array of structs by multiple values?????????????????????????????????????3个 如何在Swift中按多个条件对数组进行排序?例如,如下所示的字典数组: items = [ [ "item":"itemA" "status":"0" "category":"B" ],[ "item":"i
参见英文答案 >
How do I sort an array of structs by multiple values?????????????????????????????????????3个
如何在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" ] ] 这需要按如下方式排序: >类别ASC 我已成功地根据条件1或2对这个数组进行了排序,但不是两者都有.以下是代码: itemArray.sort({ $0["category"] < $1["category"]) }) 如何将其扩展为包含给定顺序中的多个排序标准? 解决方法
您需要进行字典比较,即如果第一个字段相等,则比较第二个字段,否则比较第一个字段.
字典使它复杂化了一点,因为你不想将数据取出两次并且密钥可能丢失,但实际上这很好,因为==和<可以处理可选的比较. 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 } } 实际上你可以在某些情况下使用lexicographicCompare来进行比较 – 但是在这种情况下它不会起作用,因为a)可选项,而它们可以与<比较,不符合Comparable所以你有手动检查nils,以及b)您希望按降序对第二个条目进行排序. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |