Kotlin:如何创建一个String类型的二维数组

6
我正在学习Kotlin。我需要创建一个能够保存单词、特殊字符和数字的二维数组。我在某处找到了这段代码:THIS。但问题是它只能保存Int类型。 当我尝试将关键字“IntArray”替换为“string”时,返回了一个错误: ERROR。 有人能帮我创建一个10x8的可以保存字符串的Kotlin数组吗?
3个回答

11

Kotlin 中没有 StringArray这里有一个解释为什么,请使用 Array<String> 替代。

如果您可以在创建数组时提供数组项,则可以按如下方式创建数组:

val result = Array(10) { i ->
    Array(8) { j -> 
        "the String at position $i, $j" // provide some initial value based on i and j
    }
}

println(result[0][3]) // Prints: the String at position 0, 3

否则,您可以使用一些默认的String值:

val result = Array(10) { Array(8) { "" } }

或者创建填充了null值的内部数组(注意:您将不得不处理空安全性,您将无法将项目用作非空值):

val result = Array(10) { arrayOfNulls<String>(8) } // The type is `Array<Array<String?>>
result[0][0] = "abc"
println(result[0][0]!!.reversed()) // Without `!!`, the value is treated as not-safe-to-use

好的回答,但是语法真的很丑陋。在我看来,这是该语言的一个弱点。 - NullPumpkinException

3

你也可以使用 Array<Array<String>>。请注意,编译器可以自动推断此类型,但指定类型可能会帮助您更好地理解发生了什么。这里有一个带输出的示例:

fun main() {
    // Create the 2D array of Strings
    val string2DArray: Array<Array<String>> = arrayOf(
        arrayOf("apple", "orange", "avocado", "mango", "banana"),
        arrayOf("_", "!", ":", "?"),
        arrayOf("1", "2", "3", "4", "5", "10"))

    // Print the 2D array
    string2DArray.forEach {
        it.forEach { it -> print("$it, ") }
        println()
    }

    // Access an individual String using index notation.
    println("My favorite fruit is: ${string2DArray[0][2]}")
}

输出:

apple, orange, avocado, mango, banana,
_, !, :, ?,
1, 2, 3, 4, 5, 10,

My favorite fruit is: avocado

0

当你将Java代码转换为Kotlin时,有时IDE不能按照预期的方式进行转换。 大多数情况下,我会得到以下代码

Array(x) { arrayOf(ArrayList<String>(y)) }

但是这段代码总是抛出 ArrayIndexOutOfBoundsException 异常,例如:

java.lang.ArrayIndexOutOfBoundsException: length=1; index=1

所以像 @hotkey 建议的那样,你可以使用下面的方法,这对我也起作用了:

Array(x) { Array(y) { ArrayList<String>(y) } }

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接