我是函数编程语言的新手,需要帮助解决我的一个问题。
我需要在两个序列之间创建一个映射:
A = tuple1(tuple1(tuple1(x,y),z),a)
B = tuple2(tuple2(tuple2(1,2),3),4)
现在我需要以下内容:
C =((x,1),(y,2),(z,3),(a,4))如果我搜索说x然后我需要得到1;
元组出现次数未知,但元组结构都相似。我无法理解并映射stackoverflow中类似问题的解决方案。因此,解释的解决方案将有所帮助
答案 0 :(得分:1)
我认为这是(丑陋的)技巧。
def toMap(x: (Any,String), y: (Any,Int)): Map[String, Int] = {
@tailrec
def rec(x: (Any,String), y: (Any,Int), map: Map[String, Int]): Map[String, Int] =
x match {
case (a: String, b) =>
val (c: Int, d) = y
map ++ Map(a -> c, b -> d)
case (a: (Any,String), b) =>
val (c: (Any,Int), d) = y
rec(a, c, map ++ Map(b -> d))
}
rec(x, y, Map.empty[String, Int])
}
假设您想要像这样使用它:
scala> val a = ((("x","y"),"z"),"a")
a: (((String, String), String), String) = (((x,y),z),a)
scala> val b = (((1,2),3),4)
b: (((Int, Int), Int), Int) = (((1,2),3),4)
scala> toMap(a,b)
res1: Map[String,Int] = Map(a -> 4, z -> 3, x -> 1, y -> 2)