Kotlin 列表列表



我在这里错过了一些东西,而且我自己找不到解决方案,似乎(至少没有在合理的时间内(。

我正在尝试使用 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.

这是为什么呢?我错过了什么?我想要 2-d 列表的原因是像在表中一样访问每个元素。我不想使用任何字符串逻辑来分隔"行"中的元素。

更简单:

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]这样的元素时,它会返回一个具有数组访问权限的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<*>>会起作用,并且会返回Any[0][0](这不是继续的好方法(。如果你让 kotlin 检测类型本身,它会生成List<List<{Comparable{Boolean & Int & String}> & java.io.Serializable}>>.
  • 重新考虑您选择的实现,并使用具有自定义数据类(或三重(的列表。这样,索引调用的类型是安全的。listOf(Triple("Knus og Knask AS", 100, true))

我自己回答这个问题,以回答那些投票否决该问题的人,甚至关闭它(!(,而没有体面或个人诚信来评论它。

这是StackOverflow的一个大问题。绝对没有充分的理由说明为什么您应该能够在不发表评论的情况下投票否决某些内容。

相关内容

  • 没有找到相关文章

最新更新