在 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))
我有这个元组序列
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))