A Map
通常是一個無序的集合。更確切地說,Map
是一個Set
的鍵值附加到它們。由於Set
僅具有不同的元素,並且未訂購,所以Map
s也是如此。
的SortedMap [字符串,INT]
然而,有一個Map
與排序鍵的實現,這是SortedMap
。它使用隱含的Ordering[Key]
來保持按鍵排序的鍵值對(請注意,它保持鍵的唯一性,因此對於給定鍵不能有兩個值)。
例如
SortedMap(-1 -> "neg", 1 -> "pos") + (0 -> "zero") ==
SortedMap(-1 -> "neg", 0 -> "zero", 1 -> "pos")
然而,在你的情況下,可能很難保持一個隱含Ordering[String]
不同於平常的一個(這是字典序)。
序列[(字符串,整數)
您可能要轉換您Map[String, Int]
爲Seq[(String, Int)]
。這樣,你可以玩你的值的順序,但你會放棄快速查找給定的鍵。
如果您想這樣做,您可以先按順序使用鍵列表指定您的訂單,然後使用原始地圖在其上進行映射。
val original: Map[String, Int] = Map("d" -> 4, "a" -> 12, "c" -> 30, "b" -> 2)
orderedMap: List[(String, Int)] = for {
key <- List("d", "b", "a", "c")
value <- original.get(key)
} yield key -> value
請注意,我用original.get(key)
避免出現實際上沒有在原來的地圖定義你的鑰匙之一的情況。
現在,得到一個值對於給定的關鍵,使用這種List[(String, Int)]
類型,你所要做的
def getKey(key: String): Option[Int] = orderedMap.
find(_._1 == key). //find the first pair where the first element is the desired key
map(_._2) // keep only the value if it exists.