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

如何在Kotlin中用sortedBy对Int类型二维数组按子数组首元素排序?

Kotlin二维数组按子数组首元素排序的解决方法

问题原因

你用的intervals.sortedBy { it[0] }逻辑本身是正确的,但它是非原地排序——调用后会返回一个新的排序后的List<IntArray>,原数组intervals不会被修改。如果只是调用这个方法却没接收返回值,自然看不到排序后的结果。

两种解决方式

方式1:接收排序后的新列表(不修改原数组)

适合不需要改变原数组的场景,直接接收sortedBy的返回值即可:

val intervals: Array<IntArray> = arrayOf(
    intArrayOf(1, 3),
    intArrayOf(15, 18),
    intArrayOf(8, 10),
    intArrayOf(2, 6),
)

// 接收排序后的新列表
val sortedIntervals = intervals.sortedBy { it[0] }

// 按指定格式输出
sortedIntervals.forEachIndexed { index, ints ->
    print("(${ints[0]},${ints[1]})${if (index != sortedIntervals.lastIndex) "; " else ""}")
}

运行后输出:(1,3); (2,6); (8,10); (15,18)

方式2:原地修改原数组

如果希望直接修改原数组,使用sortBy方法(注意少一个s),它是Array的扩展函数,会直接对原数组排序:

val intervals: Array<IntArray> = arrayOf(
    intArrayOf(1, 3),
    intArrayOf(15, 18),
    intArrayOf(8, 10),
    intArrayOf(2, 6),
)

// 原地排序原数组
intervals.sortBy { it[0] }

// 按指定格式输出
intervals.forEachIndexed { index, ints ->
    print("(${ints[0]},${ints[1]})${if (index != intervals.lastIndex) "; " else ""}")
}

运行后同样得到期望的输出。

两者区别

  • sortedBy:返回新的排序后的List,原数组保持不变,属于不可变操作。
  • sortBy:直接修改原Array,不返回新对象,属于可变操作。

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.10 18:40:24