简体   繁体   English

Scala如何将两个列表匹配到Map或Tuple

[英]Scala How to match two list to a Map or tuple

val listA = List("one", "two", "three")

val listB = List(1, 3, 4, 9, 2, 6)

Result: 结果:

val m: Map[String, Int] = Map(one -> 1, two -> 2, three -> 3)

I want to pair listA and listB to a Map with corresponding key/value. 我想将listAlistB与具有相应键/值的Map配对。 I have tried to use the zip method but it only support sequential merging. 我尝试使用zip方法,但它仅支持顺序合并。 How can I achieve the above result? 如何获得以上结果?

如果f(x)是可以返回给定字母值的相应数值的函数,则只需将listA中的每个x listA到一个对(x, f(x)) ,然后将结果对的列表转换为a使用.toMap地图。

带有已sorted listB的zip

listA.zip(listB.sorted).toMap

Do you intend: 您打算:

scala> val listA = List("one", "two", "three", "four")
listA: List[String] = List(one, two, three, four)

scala> val listB = List(1, 3, 4, 9, 2, 6)
listB: List[Int] = List(1, 3, 4, 9, 2, 6)

scala> val m = Map("one"->1, "two"->20, "three"->3)
m: scala.collection.immutable.Map[String,Int] = Map(one -> 1, two -> 20, three -> 3)

scala> listA flatMap { case k if (m contains k) && (listB contains m(k)) => Some(k, m(k)) ; case _ => None }
res4: List[(String, Int)] = List((one,1), (three,3))

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM