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

Flatten Sequence of tuples [(Int, Int), int] in Scala

我有这个元组序列

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

我想把它压平得到

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

您可以编写自己的方法来转换元组,它需要 ((X, Y), Z) 和 returns (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))

  }

应用匿名函数打乱元组:

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

因为 flatten() 方法采用隐式参数,您实际上可以传递有关如何展平集合的显式说明。

scala> val data = Seq(((1,2),3), ((4,5),6), ((7,8),9))
data: Seq[((Int, Int), Int)] = List(((1,2),3), ((4,5),6), ((7,8),9))

scala> data.flatten{case ((a,b),c) => Seq((a,b,c))}
res0: Seq[(Int, Int, Int)] = List((1,2,3), (4,5,6), (7,8,9))