Scala中是否包含将元组转换为列表的方法?

pr1*_*001 41 scala tuples list

我有一个Tuple2,List[List[String]]我希望能够将元组转换为列表,以便我可以使用List.transpose().有没有办法做到这一点?此外,我知道这是一个Pair,虽然我一直是通用解决方案的粉丝.

Mit*_*ins 77

适用于任何元组(scala 2.8):

myTuple.productIterator.toList
Run Code Online (Sandbox Code Playgroud)

Scala 2.7:

(0 to (myTuple.productArity-1)).map(myTuple.productElement(_)).toList
Run Code Online (Sandbox Code Playgroud)

不确定如何维护常规Product或Tuple的类型信息,但是对于Tuple2:

def tuple2ToList[T](t: (T,T)): List[T] = List(t._1, t._2)
Run Code Online (Sandbox Code Playgroud)

当然,您可以为所有元组定义类似的类型安全转换(最多22个).

  • 只是为了明确:productIterator丢失所有类型信息并生成Any.回想起来,这并不奇怪,因为元组的特征是每个元素都可以具有不相关的类型. (5认同)
  • 不推荐使用productElements,而是使用myTuple.productIterator.toList (4认同)
  • 看起来不错,虽然你需要`myTuple.productArity - 1`和`productElement()`返回一个`Any`.有没有办法维护内部类型信息. (2认同)

Mic*_*l T 8

使用无形 -

@ import syntax.std.tuple._
import syntax.std.tuple._
@ (1,2,3).toList
res21: List[Int] = List(1, 2, 3)
@ (1,2,3,4,3,3,3,3,3,3,3).toList
res22: List[Int] = List(1, 2, 3, 4, 3, 3, 3, 3, 3, 3, 3)
Run Code Online (Sandbox Code Playgroud)

请注意,使用Shapeless's不会丢失类型信息toList.