Swift   发布时间:2022-03-31  发布网站:大佬教程  code.js-code.com
大佬教程收集整理的这篇文章主要介绍了数组 – Swift对具有多个排序条件的数组进行排序大佬教程大佬觉得挺不错的,现在分享给大家,也给大家做个参考。

概述

参见英文答案 > How do I sort an array of structs by multiple values?                                    3个 如何在Swift中按多个条件对数组进行排序?例如,如下所示的字典数组: items = [ [ "item":"itemA" "status":"0"
参见英文答案 > 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
>状态DESC

我已成功地根据条件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)您希望按降序对第二个条目进行排序.

大佬总结

以上是大佬教程为你收集整理的数组 – Swift对具有多个排序条件的数组进行排序全部内容,希望文章能够帮你解决数组 – Swift对具有多个排序条件的数组进行排序所遇到的程序开发问题。

如果觉得大佬教程网站内容还不错,欢迎将大佬教程推荐给程序员好友。

本图文内容来源于网友网络收集整理提供,作为学习参考使用,版权属于原作者。
如您有任何意见或建议可联系处理。小编QQ:384754419,请注明来意。
标签: