【问题标题】:Referencing list element inside of map in Kotlin在 Kotlin 中的地图内引用列表元素
【发布时间】:2018-04-08 03:45:47
【问题描述】:

我是 Kotlin 的新手,并且仍在努力学习它。我已经研究这个问题几个小时了,但仍然没有弄清楚。我想通过它的索引从列表内部获取一个元素。我想出了如何用一个简单的列表来做到这一点,就像这样

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

上述方法有效,但是当我尝试使用存储在地图中的列表来执行此操作时

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 公共内联运算符 有趣的 Map.get(key: Int): ??? 在 kotlin.collections @SinceKotlin 公共运营商 fun 中定义 MatchGroupCollection.get(name: String): MatchGroup?定义在 kotlin.text

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

【问题讨论】:

    标签: collections kotlin


    【解决方案1】:

    问题是你的地图的类型声明,应该是:

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

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

    即使解决了这个问题,您也可能不得不处理可空性,因为:

    val sub_list = my_list["set1"]
    

    将返回List&lt;Any&gt;?,这意味着my_list 可能没有指定键的值。如果是这种情况,您将不得不执行以下操作:

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

    如果sub_list 为空,这反过来也可能导致异常。这可以通过以下方式解决:

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2021-10-13
      • 1970-01-01
      • 1970-01-01
      • 2021-10-17
      • 2016-10-30
      • 2022-01-27
      • 1970-01-01
      • 2011-09-21
      相关资源
      最近更新 更多