Kotlin 列表列表

Kotlin List of List

我在这里遗漏了一些东西,我似乎无法自己找到解决方案(至少在合理的时间内)。

我正在尝试使用 MutableList 创建一个二维列表,因为每个条目都包含一个字符串、一个 int 和一个布尔值。

我正在创建包含如下数据的列表条目:

var workEntry = mutableListOf("Knus og Knask AS", 100, true)

然后我尝试创建该对象的列表以及更多相同的对象:

var work = mutableListOf(mutableListOf("Knus og Knask AS", 100, true), mutableListOf("Del og Hel", 20, false))

这似乎有效,有点...

但是,如果我访问列表元素,我无法像这样访问它们:

[x][x]

如果我访问一级列表,它包含条目的所有元素:

var x = work[0].toString()  -> This yields [Knus og Knask AS, 100, true]    

但这行不通:

var y = work[0][0].toString()    <--- the second [0] doesn't exist.

这是为什么?我错过了什么?我想要一个二维列表的原因是像 table 中那样访问每个元素。我不想使用任何字符串逻辑来分隔 "row".

中的元素

更简单:

var temprow = mutableListOf("a", 10, true)
var temptable = mutableListOf<Any>(temprow)

var a1 = temptable[0][0] -> 产生“未解析的引用....没有提供数组访问的 get 方法。

只要人们投反对票或投票关闭,没有提供评论的问题,就不会对该问题投赞成票或接受任何答案。那些帮助过的人可能会感谢那些没有得到他们信任的人。

简答:

var temprow = mutableListOf("a", 10, true)
var temptable = mutableListOf<List<Any>>(temprow)

您需要将类型指定为List<Any>MutableList<Any>。这样,当您访问 temptable[0] 之类的元素时,它 returns 具有数组访问权限的 List<Any>

检查这是否有效。

fun main(){

    val arrayOrg = Array(10) { arrayOf(Triple("Knus og Knask AS", 100, true), Triple("Knus og Knask AS", 200, true)) }

    println(arrayOrg[0][1])
}

我使用了版本为 1.3.50 的 kotlin,并且 不能 重现您的错误。我试过的代码语法:

val work = mutableListOf(mutableListOf("Knus og Knask AS", 100, true), mutableListOf("Del og Hel", 20, false))
val result = work[0][0] // compiles

---------------

val work2 = listOf(listOf("Knus og Knask AS", 100, true), listOf("Del og Hel", 20, false))
val result2 = work2[0][0] // compiles

---------------   

val work3 = listOf(Triple("Knus og Knask AS", 100, true))
work3[0].first // compiles

清单

  • 你有最新的(稳定的)kotlin 版本吗?
  • 您是否尝试过在另一台机器上执行此代码(来自同事/朋友/在线 EDI)?
  • 您是否自己覆盖了列表的类型? mutableListOf<Any> 不会让您访问任何索引! List<List<*>> 会工作,return Any[0][0](这不是继续的好方法)。如果让 kotlin 自己检测类型,它会生成 List<List<{Comparable{Boolean & Int & String}> & java.io.Serializable}>>.
  • 重新考虑您的实施选择并选择包含自定义数据的列表 class(或三重)。这样你的索引调用是类型安全的。 listOf(Triple("Knus og Knask AS", 100, true))

我自己在回答这个问题,以回答那些投票否决这个问题,甚至关闭它 (!) 的人,但没有礼貌或个人诚信来评论它。

这是 Whosebug 的一个大问题。绝对没有充分的理由让您无需 post 评论就可以投票否决某些内容。