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 评论就可以投票否决某些内容。
我在这里遗漏了一些东西,我似乎无法自己找到解决方案(至少在合理的时间内)。
我正在尝试使用 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<*>>
会工作,returnAny
会[0][0]
(这不是继续的好方法)。如果让 kotlin 自己检测类型,它会生成List<List<{Comparable{Boolean & Int & String}> & java.io.Serializable}>>
. - 重新考虑您的实施选择并选择包含自定义数据的列表 class(或三重)。这样你的索引调用是类型安全的。
listOf(Triple("Knus og Knask AS", 100, true))
我自己在回答这个问题,以回答那些投票否决这个问题,甚至关闭它 (!) 的人,但没有礼貌或个人诚信来评论它。
这是 Whosebug 的一个大问题。绝对没有充分的理由让您无需 post 评论就可以投票否决某些内容。