Getting values from Map given list of keys in Scala
dictionary, list, scala
Solution
Use flatMap:
ks flatMap { k => kv get k }
Or better:
ks flatMap (kv get)
And with `for` comprehensions:
for (k <- ks; v <- kv get k) yield v
But none are as succinct or as clear as your own one-liner: :-)
ks map kv
List("k42") map kv // will barf
However, note that this is exceptional - it may throw an exception if `ks` contains a key not defined in the map `kv`.
Problem
Basically I need to get a set of values from a map for a keys in a given list (in the same order keys are given). ``` val kv = Map("k3" -> "v3", "k1" -> "v1", "k2" -> "v2") val ks = List("k1", "k2") ``` The best I could have improvised is `foldRight` over `ks`: ``` scala> (ks foldRight List[String]()) { (v, a) => kv(v) :: a } res7: List[String] = List(v1, v2) ``` Are there any more convenient ways to do this in standard lib or just the shorter code, ideally something alike `kv getVals ks`? :) Question is not so important of course, just trying to explore towards good style.