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

Swift数组按Index参数排序时将无Index元素前置的实现方法

排序逻辑正确实现方案

原有代码问题

你之前写的排序闭包{ $0.Index ?? 0 <= $1.Index ?? 1 }存在逻辑缺陷:通过空合运算符给nil值硬塞兜底数值,会让无Index属性的元素和Index值等于兜底值的元素排序权重混乱,最终导致无Index元素被排到队尾。

实现逻辑

排序时优先判断Index属性是否为空,规则如下:

  • 无Index属性的元素优先级最高,统一排在数组最前端
  • 同时存在Index属性的元素,直接按Index数值升序排列
  • 两个元素都无Index属性时,保持原有相对顺序即可

可直接运行的代码

let elements = content.sorted { pre, next in
    switch (pre.Index, next.Index) {
    case (nil, nil):
        return false
    case (nil, _):
        return true
    case (_, nil):
        return false
    case let (preIdx?, nextIdx?):
        return preIdx < nextIdx
    }
}

用给出的示例数组验证:

  • 无Index的banana.png会被固定在最前端
  • 剩余带Index的元素按值排序:pear.png(0) < orange.png(1) < apple.png(2)
    最终输出正好是预期的[ banana.png, pear.png, orange.png, apple.png ]

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.27 10:27:23