这可能是一个愚蠢的问题,但是我有一个数组:
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]
有没有办法访问嵌套数组?
答案 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