【问题标题】:Kotlin Map Type Inference FailedKotlin 地图类型推断失败
【发布时间】:2021-10-14 16:33:59
【问题描述】:

我使用 Kotlin 中的两个可变字符串列表创建了一个映射:

val mapNames = mutableMapOf(Pair(initList, nameList))

当我尝试访问我尝试过的键之一的值时

print(mapNames.get("BB")) and print(mapNames["BB"]) 并抛出错误

错误:类型推断失败。类型参数 K 的值应该 在输入类型(参数类型、接收者类型或预期 类型)。尝试明确指定它。

两个列表都是字符串列表,我只是想简单地返回与键关联的值。我试图将其类型明确指定为 String ,但仍然抛出错误。我想知道我错过了什么?

【问题讨论】:

    标签: dictionary kotlin compiler-errors


    【解决方案1】:

    您尚未创建Map<String, String>。您已经创建了一个Map<List<String>, List<String>>。映射中唯一的键是initList,它对应于值nameList。这显然不是你想要的。您希望initList 中的每个事物都与nameList 中的每个事物相匹配,并在地图中形成一个条目,这样您就得到一个Map<String, String>,对吧?

    为此,您应该zip 列表:

    val mapNames = initList.zip(nameList).toMap(mutableMapOf())
    

    zip 在这里创建一个List<Pair<String, String>>,mutableMapOf 将把该列表中的每一对转换为一个映射条目。然后就可以按预期访问地图了。

    【讨论】:

    • 是的,这就是我想要的,我现在意识到我的错误!然而,当我这样做时,我现在收到一条错误消息“类型不匹配:推断类型是 List> 但 Pair 是预期的”。
    • @IsaiahStapleton 啊,我的错。我忘了mutableMapOf 只需要可变参数。一旦你有了List<Pair<String, String>>,toMap 就可以使用了,所以你可以直接使用它。
    • 就是这样!非常感谢你,我很感激:)
    猜你喜欢
    • 1970-01-01
    • 2018-08-21
    • 2020-12-30
    • 2018-05-15
    • 2018-05-03
    • 1970-01-01
    • 2019-07-26
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多