我正在尝试在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)
答案 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 。