You need to enable JavaScript to run this app. Swift 字典数组多条件排序:优先按sequence,相同值按name排序
优惠活动
大模型
产品
解决方案
定价
更多

Swift 字典数组多条件排序:优先按sequence,相同值按name排序

多条件排序实现方案

直接在现有sorted方法的闭包内,按优先级分层编写比较逻辑即可,无需拆分多次排序,核心代码如下:

self.currArray = currArray.sorted { lhs, rhs in
    // 第一优先级:按sequence字段升序排序
    if lhs.sequence != rhs.sequence {
        return lhs.sequence < rhs.sequence
    }
    // 第二优先级:sequence值相等时,按name字段的字典序升序排列
    return lhs.name < rhs.name
}

逻辑说明

  • 你之前的排序逻辑因为只判断了sequence字段,当两个元素的sequence值相等时,sorted闭包没有可返回的比较结果,会默认保留元素在原数组中的相对顺序,所以才出现同sequence元素未按name排序的情况
  • 新的闭包内的判断严格按优先级从高到低执行,只要两个元素的sequence值不相等,就直接返回sequence的比较结果,不会触发后续的name比较逻辑
  • 只有当两个元素的sequence值完全匹配时,才会进入name字段的比较环节,对同sequence的元素做二次排序
  • 对照你提供的示例数据,sequence为0的两个元素中,TABLET的字典序位置早于TELEFON,排序完成后这两个元素的顺序就会变为TABLET在前、TELEFON在后,完全符合预期

特殊场景适配

如果name字段包含非通用拉丁字符(比如示例中的土耳其语变音字符İ、Ş等),直接使用<做字符串比较会按Unicode编码顺序排序,若需要匹配对应语言的字母表排序规则,可以将name的比较逻辑替换为本地化比较:

// 替换原name比较的行
return lhs.name.localizedCompare(rhs.name) == .orderedAscending

内容的提问来源于stack exchange,提问作者uyarc

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.27 13:06:10