从Scala中获取键的列表中的值获取值

时间:2013-01-31 10:07:22

标签: list scala map

基本上我需要从地图中获取给定列表中的键的一组值(以相同的顺序键给出)。

val kv = Map("k3" -> "v3", "k1" -> "v1", "k2" -> "v2")
val ks = List("k1", "k2")

我能做到的最好的事情是foldRight超过ks

scala> (ks foldRight List[String]()) { (v, a) => kv(v) :: a }
res7: List[String] = List(v1, v2)

有没有更方便的方法可以在标准库中执行此操作或只使用较短的代码,理想情况下类似kv getVals ks? :)

问题当然不是那么重要,只是试图探索良好的风格。

2 个答案:

答案 0 :(得分:20)

或者:

ks collect kv

结果由kv的所有kv值组成。

(除了作为一个函数,Map也是一个PartialFunction)

答案 1 :(得分:16)

使用flatMap:

 ks flatMap { k => kv get k }

或更好:

 ks flatMap (kv get)

for理解:

for (k <- ks; v <- kv get k) yield v

但没有一个像你自己的单行一样简洁或明确: - )

ks map kv
List("k42") map kv // will barf

但请注意,这是例外情况 - 如果ks包含未在地图kv中定义的密钥,则可能会引发异常。