Kotlin:我可以从另一个数组内部访问嵌套数组吗?

时间:2018-11-02 23:39:29

标签: arrays kotlin

这可能是一个愚蠢的问题,但是我有一个数组:

var testarray = arrayOf(0,0,arrayOf(7,5,2))

因此,我尝试通过键入testarray[2][1]访问第二个数组。但是,这会引发错误:

error: unresolved reference. None of the following candidates is applicable because of receiver type mismatch: 
@InlineOnly public inline operator fun <@OnlyInputTypes K, V> Map<out Int, ???>.get(key: Int): ??? defined in kotlin.collections
testarray[2][1]
^
error: no get method providing array access
testarray[2][1]

有没有办法访问嵌套数组?

2 个答案:

答案 0 :(得分:3)

您的外部数组包含Ints和一个数组。因此,其实际声明的类型(您可以指定,或者可以让IDE为您指定)是Array<Serializable>

Serializable可以是任何东西。编译器不知道索引2处的元素恰好是数组。因此,它不能让您在其上使用[]运算符。您需要将元素强制转换为数组才能做到这一点:

println((testarray[2] as Array<Int>)[1])

这将解决编译问题,但不能解决设计问题。通常,使用数组已经是一种气味,但是使用包含混合类型的数组则是更大的味道。您应该重新考虑您的设计。

答案 1 :(得分:1)

我还认为您应该像JB Nizet所说的那样重新考虑您的设计。

您可以通过将数组归纳为以下数组来做到这一点:

cache

这将确保您可以获取和设置以下元素:

val testArray = arrayOf(arrayOf(0), arrayOf(0), arrayOf(7, 5, 2))

只要您只想按照描述的方式访问元素并保持设计,就可以在testArray[2][1] testArray[2][0] = 4 上创建(本地)运算符扩展函数get,如下所示:

Serializable