基本上我需要从地图中获取给定列表中的键的一组值(以相同的顺序键给出).
val kv = Map("k3" -> "v3", "k1" -> "v1", "k2" -> "v2")
val ks = List("k1", "k2")
Run Code Online (Sandbox Code Playgroud)
我能做到的最好的即兴创作foldRight结束了ks:
scala> (ks foldRight List[String]()) { (v, a) => kv(v) :: a }
res7: List[String] = List(v1, v2)
Run Code Online (Sandbox Code Playgroud)
有没有更方便的方法在标准库中执行此操作或只是更短的代码,理想情况下类似的东西kv getVals ks?:)
问题当然不是那么重要,只是试图探索好的风格.
小智 20
要么:
ks collect kv
Run Code Online (Sandbox Code Playgroud)
结果由kv的所有kv值组成,其中键为ks.
(除了作为一个函数,一个Map也是一个PartialFunction)
Fai*_*aiz 17
使用flatMap:
ks flatMap { k => kv get k }
Run Code Online (Sandbox Code Playgroud)
或更好:
ks flatMap (kv get)
Run Code Online (Sandbox Code Playgroud)
并且for理解:
for (k <- ks; v <- kv get k) yield v
Run Code Online (Sandbox Code Playgroud)
但没有一个像你自己的单行简洁或清晰:(-)
ks map kv
List("k42") map kv // will barf
Run Code Online (Sandbox Code Playgroud)
但请注意,这是例外情况 - 如果ks包含未在地图中定义的键,则可能会抛出异常kv.