更新ListMap并保留Scala中的顺序

时间:2014-10-09 17:32:12

标签: scala

我有一个基本的不可变ListMap,可以很好地保留项目的顺序。但是,我想在某个时刻更新ListMap中的现有键,但该特定键的顺序将丢失。

val myListMap = ListMap(1 -> "foo", 2 -> "bar")
val myListMap2 = myListMap.updated(1, "foo2")
// myListMap2: ListMap[Int,String] = Map(2 -> bar, 1 -> foo2)

如何在不丢失现有密钥位置的情况下更新ListMap?

2 个答案:

答案 0 :(得分:1)

ListMap的建立方式只是巧合。 ListMap本身并不是一个真正定义的API,而只是Map的一个实现。我建议改为使用抽象类型,即Map(1 -> "foo", 2 -> "bar")

如果您需要对地图进行排序,请使用专用的SortedMap界面。

import collection.immutable.SortedMap
val m0 = SortedMap(1 -> "foo", 2 -> "bar")
val m1 = m0.updated(1, "baz")
val m2 = m1 + (0 -> "abc")

答案 1 :(得分:0)

如果您仅对Map API感兴趣,而对插入性能不感兴趣,则可以执行以下操作:

val myListMap = ListMap(1 -> "foo", 2 -> "bar")
val myListMap2 = myListMap.map(c => if(c._1 == 1) c._1 -> "foo2" else c)

插入顺序不会改变。