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
相关产品推荐
相关产品推荐

