Map
は、通常、順序付けられていないコレクションです。より正確には、Map
は、値が付いたキーのSet
です。 Set
は異なる要素しか持たず、注文されていないので、Map
もそうです。
のSortedMap [文字列、INT]
しかしながら、ソートされたキーを持つMap
の実装があり、それはSortedMap
です。暗黙的にOrdering[Key]
を使用して、キーでキーと値のペアを並べた状態にします(キーの統一性が保たれているため、特定のキーに対して2つの値を持つことはできません)。
例えば
SortedMap(-1 -> "neg", 1 -> "pos") + (0 -> "zero") ==
SortedMap(-1 -> "neg", 0 -> "zero", 1 -> "pos")
しかし、あなたの場合には、(辞書式順序で)通常とは異なる暗黙のOrdering[String]
を維持するのは難しいかもしれません。
のSeq [(文字列、INT)]
あなたのMap[String, Int]
Seq[(String, Int)]
に変換したい場合があります。そうすれば、あなたはあなたの値の順序で遊ぶことができますが、あなたは特定のキーの高速検索を失います。
これを行うには、まずキーのリストを使用して順序を指定してから、元のマップを使用して順序を指定します。私はあなたの鍵の一つは、実際にオリジナルのマップで定義されていない場合を避けるためにoriginal.get(key)
を使用
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
注意。
今、与えられたキーに対する値を取得するには、この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.