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
方法,但它只支持顺序合并。我怎样才能达到上述效果?
答案 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))