如何在具有 LinkedHashMap[Int, ListBuffer[Int]] 的 Scala 中更新 LinkedHashMap 中键集的每个值?
How to update every value of the keyset in a LinkedHashMap in Scala, having a LinkedHashMap[Int, ListBuffer[Int]]?
我有一个 LinkedHashMap 类型:
var map: LinkedHashMap[Int, ListBuffer[Int]] = ((1 -> (2, 1)), (2 -> 2), (3 -> (5, 3)))
我想在每个键的每个列表中添加一个元素,假设我想添加“6”以便拥有:
((1 -> (6, 2, 1)), (2 -> (6, 2)), (3 -> (6, 5, 3)))
我该怎么做?
像这样:
val map: mutable.LinkedHashMap[Int, ListBuffer[Int]] =
mutable.LinkedHashMap(1 -> ListBuffer(2, 1),
2 -> ListBuffer(2, 2),
3 -> ListBuffer(5, 3))
val res = map.mapValues(lstBuffer => lstBuffer += 6)
println(res)
产量:
Map(1 -> ListBuffer(2, 1, 6), 2 -> ListBuffer(2, 2, 6), 3 -> ListBuffer(5, 3, 6))
请注意,mapValues
是惰性的,除非具体化,否则不会执行。如果我们想让这个严格并立即执行,我们可以使用 map
:
val res = map.map { case (_, lstBuffer) => lstBuffer += 6 }
如果你想 prepend,请改用 .prepend
(returns 单元并对当前 Map
实例产生副作用) :
map.foreach { case (_, lstBuffer) => lstBuffer.prepend(6) }
我想指出,通常情况下,如果您想按顺序迭代整个 Map[K, V]
,这表明您使用了错误的数据结构。尽管没有更多信息,我无法真正为该假设建立基础。
我有一个 LinkedHashMap 类型:
var map: LinkedHashMap[Int, ListBuffer[Int]] = ((1 -> (2, 1)), (2 -> 2), (3 -> (5, 3)))
我想在每个键的每个列表中添加一个元素,假设我想添加“6”以便拥有:
((1 -> (6, 2, 1)), (2 -> (6, 2)), (3 -> (6, 5, 3)))
我该怎么做?
像这样:
val map: mutable.LinkedHashMap[Int, ListBuffer[Int]] =
mutable.LinkedHashMap(1 -> ListBuffer(2, 1),
2 -> ListBuffer(2, 2),
3 -> ListBuffer(5, 3))
val res = map.mapValues(lstBuffer => lstBuffer += 6)
println(res)
产量:
Map(1 -> ListBuffer(2, 1, 6), 2 -> ListBuffer(2, 2, 6), 3 -> ListBuffer(5, 3, 6))
请注意,mapValues
是惰性的,除非具体化,否则不会执行。如果我们想让这个严格并立即执行,我们可以使用 map
:
val res = map.map { case (_, lstBuffer) => lstBuffer += 6 }
如果你想 prepend,请改用 .prepend
(returns 单元并对当前 Map
实例产生副作用) :
map.foreach { case (_, lstBuffer) => lstBuffer.prepend(6) }
我想指出,通常情况下,如果您想按顺序迭代整个 Map[K, V]
,这表明您使用了错误的数据结构。尽管没有更多信息,我无法真正为该假设建立基础。