首页 > 解决方案 > 如何将键和值添加到 Kotlin 中列表的映射?

问题描述

我创建了一个列表地图,我只是想像这样添加到地图中:

val bandMap: Map<Int,List<List<Int>>> = mutableMapOf()

val rsrpList = mutableListOf<Int>()
val rsrqList = mutableListOf<Int>()
val levelList = mutableListOf<Int>()
rsrpList.add(3)
rsrqList.add(4)
levelList.add(1)
val listOfLists = mutableListOf(rsrpList,rsrqList,levelList)
bandMap[3] = listOfLists

但是“bandMap[3] = listOfLists”表示不匹配。

No set method providing array access

不知道这会在哪里?似乎它不知道我正在尝试映射某些东西。我尝试了 put 方法,但它似乎无法识别它。

谢谢。

编辑:

谢谢 Tenfour04 - 你帮了很多忙!

标签: kotlin

解决方案


您已在此处将外部映射指定为只读映射,将内部列表指定为变量类型中的只读列表:

private val bandMap: MutableMap<Int,List<List<Int>>> = mutableMapOf()

即使您将 MutableLists 放入您的地图中,由于属性类型为bandMap.

MutableList如果需要对其进行变异,请指定为内部列表的类型:

private val bandMap: MutableMap<Int, List<MutableList<Int>>> = mutableMapOf()

或者,如果您还需要修改列表的外部列表:

private val bandMap: MutableMap<Int, MutableList<MutableList<Int>>> = mutableMapOf()

旁注,这种三维集合结构使用起来有点混乱(容易出错)。您可能会想出一个使用类的结构,以便更容易推理和使用。我真的不知道你的结构代表什么,但这是一个模糊的例子:

class Band {
    val rsrpList = mutableListOf<Int>()
    val rsrqList = mutableListOf<Int>()
    val levelList = mutableListOf<Int>()
}

val bandMap: MutableMap<Int, Band> = mutableMapOf()
bandMap[3] = Band()

推荐阅读