0

我有一个 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)))

我该怎么做呢?

4

1 回答 1

0

像这样:

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改用(返回 Unit 并对当前Map实例产生副作用):

map.foreach { case (_, lstBuffer) => lstBuffer.prepend(6) }

我想指出,通常,如果你想Map[K, V]按顺序迭代整个,这表明你使用了错误的数据结构。尽管没有更多信息,但我无法真正为该假设建立基础。

于 2017-12-04T13:33:20.637 回答