我有一个基本的不可变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?
答案 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)
插入顺序不会改变。