更新Map

时间:2020-06-30 20:25:30

标签: kotlin

我正在尝试在Kotlin中使用键/值对创建一个数据结构,其中键是一个Integer,而值是一个可变的Integers列表。类似于(伪代码):

1: 10, 20, 30
2: 50, 30, 25
3: 5
...

我不确定要使用的最佳数据结构是什么,但是我正在尝试通过地图来做到这一点:

var map = mutableMapOf<Int, MutableList<Int>>()

对此我有几个问题:

地图需要可变吗?键和值是动态的,但是还会有一个Int值与MutableList匹配的键。

这是最适合执行此类操作的数据结构吗?

我是否需要首先检查键是否存在,或者我可以开始在键上设置值,例如:

var id = 2
// assuming the map has already has [2]: 10, 3, this would mutate it to [2]: 10, 3, 5
map[id].add(5)

1 个答案:

答案 0 :(得分:2)

我不确定要使用的最佳数据结构是什么,但是我正在尝试通过地图来做到这一点:

var map = mutableMapOf<Int, MutableList<Int>>()

好选择。

地图需要可变吗?

是的,除非在地图的创建中知道所有键(不一定是值-您可以将空MutableList作为默认键)是已知的

这是最适合执行此类操作的数据结构吗?

这有点主观,但是鉴于您提供的信息-是的-我认为。

我是否需要首先检查键是否存在,或者我可以开始在键上设置值,例如:

var id = 2
// assuming the map has already has [2]: 10, 3, this would mutate it to [2]: 10, 3, 5
map[id].add(5)

如果地图中已经存在id,则可以执行map[id]!!.add(5)(注意!!,因为Map的运算符[]返回一个可选的( ?)。您可以确保编译器存在(通过!!),也可以先使用?.对其进行检查。


作为对null项进行单独检查的替代方法,可以使用getOrPut方法:

map.getOrPut(id, ::mutableListOf).add(5)

感谢 @ Tenfour04

相关问题