Kotlin:如何创建String类型的2D数组

时间:2017-09-25 17:30:31

标签: arrays 2d kotlin

我正在学习kotlin。我需要创建一个可以保存单词,特殊字符和数字的二维数组。我发现这段代码的地方 THIS 这个问题是它只能容纳Int。 当我尝试更换关键字" IntArray"用"字符串"。它返回了一个错误 ERROR 有人可以帮我创建一个可以在Kotlin中保存字符串的10x8 Arrray

3 个答案:

答案 0 :(得分:5)

Kotlin (here's an explanation why)中没有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值的内部数组(注意:您必须deal with nullability,您将无法将这些项用作非空值):

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

答案 1 :(得分:0)

您也可以使用 for key, value in pet.items(): print(f"\t{key.title()}: {value.title()}") 。请注意,编译器可以自动推断此类型,但是指定类型可以帮助您更好地了解发生了什么。这是输出示例:

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]}")
}

答案 2 :(得分:0)

当您将Java代码转换为Kotlin时,有时IDE无法按照预期的方式进行转换。 大多数时候我得到的代码是

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

但是此代码始终会引发 ArrayIndexOutOfBoundsException 异常,例如

java.lang.ArrayIndexOutOfBoundsException:length = 1;索引= 1

因此,按照@hotkey的建议,您可以使用以下对我也有用的方法;

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