2014-10-09 26 views
0

我有一個基本的不變的ListMap,它很好地保留了項目的順序。不過,我想在某個時間點更新ListMap中的現有密鑰,但該特定密鑰的順序會丟失。更新ListMap並在Scala中保留訂單

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

如何在不丟失現有密鑰位置的情況下更新ListMap?

回答

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") 
+0

看起來像SortedMap是不夠的。我需要保留一個特定的自定義順序。一個更精確的例子:'ListMap(「color」 - >「green」,「country」 - >「Germany」)' – Lauris 2014-10-09 17:49:17

+0

然後,你應該維護一個單獨的'List'或'Vector',它是一個線性序列。 – 2014-10-09 17:51:04

+0

這似乎是一個可行的解決方案,但是會帶來很小的開銷。 – Lauris 2014-10-09 17:54:06