在Scala中展平元组[(Int,Int),int]的序列

时间:2017-02-23 06:15:28

标签: scala flatten

我有这个元组序列

val data = Seq(((1,2),3), ((4,5),6), ((7,8),9))

我想把它压扁以获得

Seq((1,2,3), (4,5,6), (7,8,9))

2 个答案:

答案 0 :(得分:6)

应用匿名函数来改组元组:

val data = Seq(((1,2),3), ((4,5),6), ((7,8),9))
data map { case ((a, b), c) => (a, b, c) }

答案 1 :(得分:0)

您可以编写自己的方法来转换元组,该方法需要((X, Y), Z)并返回(X, Y, Z)

例如

def flattenMe[X, Y, Z](tuple: ((X, Y), Z)): (X, Y, Z) =
      (tuple._1._1, tuple._1._2, tuple._2)

或者,您可以传递序列本身并展平每个元组。

  it("flattens me to single tuple"){

    def flattMe[X, Y, Z](sequence: Seq[((X, Y), Z)]) : Seq[(X, Y, Z)] =
          sequence.map { case ((x, y), z) => (x, y, z)}

    val data = flattMe(Seq(((1,2),3), ((4,5),6), ((7,8),9)))

    assert(data.head == (1, 2, 3))
    assert(data(1) == (4, 5, 6))
    assert(data(2) == (7, 8, 9))

  }