首页 文章

引用Kotlin中 Map 内的列表元素

提问于
浏览
1

我是Kotlin的新手,我还在努力学习它 . 我一直在研究这个问题好几个小时,但仍然没有弄明白 . 我希望通过它的索引从列表内部获取一个元素 . 我想出了如何用一个简单的列表来做这个,就像这样

val my_list = listOf(1,2,3)
println(my_list.get(0))

上面的工作,但当我尝试使用存储在 Map 内的列表

val my_list = mutableMapOf<String, Any>()

my_list["set1"] = listOf(1,2,3)
my_list["set2"] = listOf("A","B","C")
my_list["set3"] = listOf("d","e","f")

val sub_list = my_list["set1"]

println(sub_list.get(0))

我收到以下错误

未解决的参考 . 由于接收器类型不匹配,以下候选者都不适用:@InlineOnly public inline operator fun <@OnlyInputTypes K,V> Map.get(key:Int):???在kotlin.collections中定义@SinceKotlin公共运算符fun MatchGroupCollection.get(name:String):MatchGroup?在kotlin.text中定义

注意:我主要使用Python,所以这就是我习惯的 . 我试图在Kotlin中重现的Python功能是有一个列表字典 .

1 回答

  • 1

    问题是 Map 的类型声明,它应该是:

    val my_list = mutableMapOf<String, List<Any>>()
    

    Any 没有 get() 方法,因此无法调用它 .

    即使问题得到解决,你也可能不得不处理可空性问题,因为:

    val sub_list = my_list["set1"]
    

    将返回 List<Any>? ,这意味着 my_list 可能没有指定键的值 . 如果's the case, you' ll必须做类似的事情:

    sub_list?.get(0)?.run { println(it) }
    

    反过来,如果 sub_list 为空,也可能导致异常 . 这可以通过更类似的东西来解决:

    vsub_list?.firstOrNull()?.run { println(it) }
    

相关问题