在Scala中将n个元素的数组转换为n个元素的元组



我有一个元素数组(在我的例子中是数字)

var myArray= Array(1, 2, 3, 4, 5, 6)
//myArray: Array[Int] = Array(1, 2, 3, 4, 5, 6)

,我想获得一个包含它们的元组

var whatIwant= (1,2,3,4,5,6)
//whatIwant: (Int, Int, Int, Int, Int, Int) = (1,2,3,4,5,6)

我尝试了下面的代码,但它不起作用:

var tuple = myArray(0)
for (e <- myArray) 
{
var tuple = tuple :+ e
}
//error: recursive variable tuple needs type

简单的答案是:

val whatIwant =
myArray match {
case Array(a, b, c, d, e, f) => (a, b, c, d, e, f)
case _                       => (0, 0, 0, 0, 0, 0)
}

如果你想在myArray中支持不同数量的元素,那么你将陷入痛苦的世界,因为你将失去与元组相关的所有类型信息。

如果你正在使用Spark,你应该使用它的机制来直接生成你想要的数据,而不是先转换到Array

元组的元素个数不是无限叠加的。在早期的版本中,最多只有22个。Scala将元素数量不同的元组视为不同的类。所以你不能像列表那样添加元素。除了利用诸如反射之类的元编程技术外,元组对象只能显式生成。

最新更新