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

Kotlin中是否可无需预先赋值创建多维数组?是否存在类似C#的简化写法

嘿,这个问题问得很到位!在Kotlin里确实能实现你想要的——创建无需预先给元素赋值的多维数组,而且也有类似C#那种string[][] arr = string[5][]的简化写法,我给你一步步讲清楚:

在Kotlin中创建无预先赋值的多维数组

1. 交错数组(Jagged Array):对应C#的T[][]写法

你提到的C#里string[][] arr = string[5][],本质是创建一个包含5个可空字符串数组的交错数组,每个子数组可以是任意长度甚至未初始化。在Kotlin里,我们可以直接用arrayOfNulls来实现这种效果:

// 完全对应C#的写法:创建长度为5的数组,每个元素是可空的String数组,初始为null
val arr: Array<Array<String>?> = arrayOfNulls(5)

之后你可以随时给任意位置的子数组赋值,比如:

// 给第一个位置赋值一个长度为2的字符串数组
arr[0] = arrayOf("hello", "kotlin")
// 给第二个位置赋值一个长度为1的数组
arr[1] = arrayOf("stackoverflow")
// 剩下的位置可以保持null,之后再按需初始化

如果你的场景不需要可空子数组,也可以创建一个包含空数组的交错数组:

// 创建长度为5的数组,每个元素是空的String数组
val arr: Array<Array<String>> = Array(5) { emptyArray() }

之后同样可以替换任意位置的子数组为你需要的长度。

2. 规则二维数组(Rectangular Array)

如果你的多维数组是每行每列长度都固定的规则数组,Kotlin也有简洁的写法。比如创建一个3行4列的字符串数组,所有元素初始为null(无需预先赋值具体内容):

val arr: Array<Array<String?>> = Array(3) { arrayOfNulls(4) }

对于基本数据类型(比如Int、Boolean),Kotlin提供了专门的基本类型数组类,创建起来更高效,默认会用基本类型的默认值初始化(比如Int是0,Boolean是false):

// 创建3行4列的Int二维数组,所有元素初始为0
val intArr: Array<IntArray> = Array(3) { IntArray(4) }

补充说明

要注意的是,JVM上的数组必须初始化所有元素,所以Kotlin里不存在“完全不赋值”的数组——引用类型数组的元素默认是null,基本类型数组则是对应类型的默认值。但这完全符合你的需求:不需要预先给元素赋业务相关的值,只需要先分配数组结构,之后再按需填充内容。

内容的提问来源于stack exchange,提问作者Crew'row

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.04.29 20:47:49