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

Swift 4多维数组排序求助:新手需实现指定顺序的数组排序

解决Swift多维数组的多级排序问题

嘿,作为Swift新手能尝试自己写排序逻辑已经很棒啦!你遇到的问题其实很常见:只用arr.sort { $0[0] < $1[0] }排序时,只会对比子数组的首列元素,当首列相等时,不会继续往后比较其他列,所以首列相同的子数组顺序还是原始状态,和你想要的结果不符。

从你给出的预期结果来看,你需要的是从左到右依次对比子数组的每一列:先比首列,首列小的排前面;首列相等就比第二列,第二列小的排前面;以此类推,直到找到第一个不同的元素来决定顺序。

针对这个需求,给你两种简洁的实现方式:

方式一:手动依次对比每一列

适合子数组长度不固定,或者需要自定义某一列比较规则的场景:

var arr = [[10, 2, 4, 10, 23, 56], [0, 12, 14, 20, 28, 42], [0, 2, 4, 10, 26, 54], [1, 24, 34, 40, 47, 51], [1, 23, 24, 30, 33, 50]]

arr.sort {
    // 先比首列
    if $0[0] != $1[0] {
        return $0[0] < $1[0]
    }
    // 首列相等,比第二列
    if $0[1] != $1[1] {
        return $0[1] < $1[1]
    }
    // 第二列相等,比第三列,以此类推
    if $0[2] != $1[2] {
        return $0[2] < $1[2]
    }
    if $0[3] != $1[3] {
        return $0[3] < $1[3]
    }
    if $0[4] != $1[4] {
        return $0[4] < $1[4]
    }
    // 前面都相等,比最后一列
    return $0[5] < $1[5]
}

print(arr)
// 输出结果正好是你期望的:[[0, 2, 4, 10, 26, 54], [0, 12, 14, 20, 28, 42], [1, 23, 24, 30, 33, 50], [1, 24, 34, 40, 47, 51], [10, 2, 4, 10, 23, 56]]

方式二:利用Swift元组的自动比较特性

因为你的每个子数组都是固定的6个Int元素,Swift的元组会自动按元素顺序依次对比,用这个特性可以让代码更简洁:

var arr = [[10, 2, 4, 10, 23, 56], [0, 12, 14, 20, 28, 42], [0, 2, 4, 10, 26, 54], [1, 24, 34, 40, 47, 51], [1, 23, 24, 30, 33, 50]]

// 把数组转成元组后直接对比
arr.sort {
    let tuple0 = ($0[0], $0[1], $0[2], $0[3], $0[4], $0[5])
    let tuple1 = ($1[0], $1[1], $1[2], $1[3], $1[4], $1[5])
    return tuple0 < tuple1
}

print(arr)
// 同样会输出你想要的排序结果

小提醒

如果你的数组里存在长度不一致的子数组,建议先做个校验(比如检查所有子数组的count是否为6),避免出现数组越界的错误哦~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.26 08:37:22