0

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

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

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

更简单:

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

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

只要人们在不提供评论的情况下投票反对或投票结束该问题,就不会对此问题进行投票或接受任何答案。那些乐于助人的人可能会感谢那些人没有得到他们的信任。

4

4 回答 4

0

简短的回答:

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

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

于 2020-01-24T11:06:06.560 回答
0

检查这是否有效。

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])
}
于 2020-01-24T11:08:33.380 回答
0

我使用带有版本的 kotlin,1.3.50无法重现您的错误。我尝试过的代码语法:

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}>>.
  • 重新考虑您对实现的选择,并选择具有自定义数据类(或 Triple)的 List。这样你的索引调用是类型安全的。listOf(Triple("Knus og Knask AS", 100, true))
于 2020-01-24T14:40:26.433 回答
0

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

这是 StackOverflow 的一个大问题。绝对没有充分的理由让您无需发表评论就可以对某事投反对票。

于 2020-02-04T09:22:32.797 回答