从Scala中的元组创建地图

时间:2014-06-27 21:54:15

标签: scala functional-programming

我是函数编程语言的新手,需要帮助解决我的一个问题。

我需要在两个序列之间创建一个映射:

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中类似问题的解决方案。因此,解释的解决方案将有所帮助

1 个答案:

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