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

时间:2016-03-19 16:27:50

标签: list scala dictionary tuples

template <class T>
void call_f(T val) { f(val); }

namespace N {
    struct X { };
    void f(X ) { }
}

int main() {
    f(N::X{});      // ok
    call_f(N::X{}); // now ok too, ADL finds N::f
}

结果:

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

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

我想将val m: Map[String, Int] = Map(one -> 1, two -> 2, three -> 3) listA与具有相应键/值的listB配对。我曾尝试使用Map方法,但它只支持顺序合并。我怎样才能达到上述效果?

3 个答案:

答案 0 :(得分:1)

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

答案 1 :(得分:1)

带有zip listB的

sorted

listA.zip(listB.sorted).toMap

答案 2 :(得分:0)

你打算:

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))