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

Kotlin中IntArray.sort()及sortedArray调用后始终返回全0数组问题咨询

解决Kotlin中IntArray排序后返回全0数组的问题

嘿,作为Kotlin新手碰到这种情况真的挺闹心的😅,我来帮你捋捋问题出在哪!

首先,你遇到的排序后全是0的情况,大概率是数组本身在排序前就全是0,和sort()或者sortedArray()方法本身没关系。这俩方法只是对数组里已有的元素进行排序,不会凭空生成新元素。

先搞懂两个方法的区别(避免混淆)

  • IntArray.sort():这是原地排序,会直接修改原数组的内容,不会返回新数组。如果原数组全是0,排序后当然还是全0。
  • IntArray.sortedArray():这是返回新数组,原数组保持不变,但新数组的元素是原数组元素排序后的结果——同样,如果原数组全0,新数组也全是0。

最常见的错误原因:数组初始化不对

很多新手会用IntArray(size)创建数组,但这个方法会生成一个指定长度、所有元素默认值为0的数组,如果没给它赋值就直接排序,结果肯定全是0。比如:

// 错误示例:创建了全0数组却没赋值
val nums = IntArray(3) // 此时nums是 [0, 0, 0]
nums.sort()
println(nums.contentToString()) // 输出 [0, 0, 0]

val sortedNums = nums.sortedArray()
println(sortedNums.contentToString()) // 还是 [0, 0, 0]

正确的打开方式

要创建带有初始元素的数组,应该用intArrayOf()方法,或者手动给IntArray的元素赋值后再排序:

方式1:用intArrayOf()初始化带值的数组

val nums = intArrayOf(9, 2, 5, 1)
nums.sort() // 原地修改原数组
println(nums.contentToString()) // 输出 [1, 2, 5, 9]

// 用sortedArray()返回新数组,原数组不受影响
val original = intArrayOf(7, 3, 8)
val sorted = original.sortedArray()
println(original.contentToString()) // 原数组还是 [7, 3, 8]
println(sorted.contentToString()) // 新数组是 [3, 7, 8]

方式2:给IntArray手动赋值

val nums = IntArray(3)
nums[0] = 6
nums[1] = 1
nums[2] = 4
nums.sort()
println(nums.contentToString()) // 输出 [1, 4, 6]

额外排查点

如果你是从其他地方获取的数组(比如函数返回、读取输入),一定要确认这个数组在排序前是不是真的包含非0元素。比如如果某个函数返回的是未正确初始化的IntArray,那排序后也会是全0。

总结一下:先检查你的数组在排序前的内容,确保它已经被正确赋值了,再用sort()或sortedArray()就没问题啦!

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.19 08:37:39