我有一个元素数组(在我的例子中是数字)
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将元素数量不同的元组视为不同的类。所以你不能像列表那样添加元素。除了利用诸如反射之类的元编程技术外,元组对象只能显式生成。