You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Swift中按名称字母与计数实现多条件排序失败求助

Swift数组多条件排序的正确实现

你的代码问题出在元组比较的逻辑上,错误地将两个元素的name属性交叉比较,导致name的排序规则失效。以下是两种正确的多条件排序实现方案,假设你需要先按count降序排列,count相同时按name升序排列:

方案一:分步判断(直观易懂)

通过显式判断count是否相等,分别处理主、次排序条件:

let sortedArray = array.sorted {
    if $0.count != $1.count {
        // 主条件:count降序
        return $0.count > $1.count
    } else {
        // 次条件:count相同时,name升序
        return $0.name < $1.name
    }
}

方案二:元组比较(简洁写法)

利用Swift元组的逐元素比较特性,将count取反实现降序逻辑,再搭配name升序构造元组:

let sortedArray = array.sorted(by: { (-$0.count, $0.name) < (-$1.count, $1.name) })

排序结果验证

针对你提供的示例数据,两种方案的排序结果一致:

Variant(name: "Bc", count: 55),
Variant(name: "Bd", count: 45),
Variant(name: "Ab", count: 12),
Variant(name: "Ac", count: 10),
Variant(name: "Ad", count: 8),
Variant(name: "Ae", count: 0)

原代码错误分析

你之前的写法($0.count ?? 0, $1.name) > ($1.count ?? 0, $0.name)存在两个问题:

  1. 元组的第二个元素交叉使用了$1.name和$0.name,导致name的比较逻辑完全混乱;
  2. 即使count相等,也无法实现name的正确排序,因为比较的是两个元素name的反向关系。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.05 14:10:25