Arrays 将数组[(双精度,双精度)]转换为Seq[Seq[Double]]

Arrays 将数组[(双精度,双精度)]转换为Seq[Seq[Double]],arrays,scala,type-conversion,seq,Arrays,Scala,Type Conversion,Seq,我是Scala的新手,我必须使用一个函数,该函数的参数类型为Seq[Seq[Double]]。但是,我的数据的类型是Array[(Double,Double)] 我试着用.toSeq转换数据,但是没有用 在这方面的任何修复都将受到高度赞赏。谢谢 val input: Array[(Double, Double)] = ... val output: Seq[Seq[Double]] = input.map { case (x, y) => Seq(x, y) } 不幸的是,在标准库中没有

我是Scala的新手,我必须使用一个函数,该函数的参数类型为
Seq[Seq[Double]]
。但是,我的数据的类型是
Array[(Double,Double)]

我试着用
.toSeq
转换数据,但是没有用

在这方面的任何修复都将受到高度赞赏。谢谢

val input: Array[(Double, Double)] = ...
val output: Seq[Seq[Double]] = input.map { case (x, y) => Seq(x, y) }
不幸的是,在标准库中没有通用的方法可以安全地将元组转换为列表,但是,它提供了以下功能:

import shapeless.syntax.std.tuple._

val input: Array[(Double, Double)] = ...
val output: Seq[Seq[Double]] = input.map(_.toList)
Shapeless足够聪明,可以在元组包含不同类型的组件时计算最低上界:

val input: Array[(Double, Int)] = ...
// AnyVal is the closest type which both Double and Int are subtypes of
val output: Seq[Seq[AnyVal]] = input.map(_.toList)
最后,有一种非类型安全的方法可以仅使用标准库工具来实现这一点。您可以依赖这样一个事实:Scala中的所有元组都实现了该特性,因此可以作为
任意
的集合使用:

val input: Array[(Double, Double)] = ...
val output: Seq[Seq[Double]] = input.map(_.productIterator.toSeq.asInstanceOf[Seq[Double]])
只要小心,这是安全的,但它确实需要显式强制转换,而且更加冗长

如果有相对较小的固定长度元组,那么我认为最好使用基于部分函数的方法。否则,这取决于您,但我会使用shapeless,因为它是类型安全的,而且我在我的许多项目中也会使用shapeless来处理其他事情,所以对我来说是免费的:)

不幸的是,在标准库中没有通用的方法可以安全地将元组转换为列表,但是,它提供了以下功能:

import shapeless.syntax.std.tuple._

val input: Array[(Double, Double)] = ...
val output: Seq[Seq[Double]] = input.map(_.toList)
Shapeless足够聪明,可以在元组包含不同类型的组件时计算最低上界:

val input: Array[(Double, Int)] = ...
// AnyVal is the closest type which both Double and Int are subtypes of
val output: Seq[Seq[AnyVal]] = input.map(_.toList)
最后,有一种非类型安全的方法可以仅使用标准库工具来实现这一点。您可以依赖这样一个事实:Scala中的所有元组都实现了该特性,因此可以作为
任意
的集合使用:

val input: Array[(Double, Double)] = ...
val output: Seq[Seq[Double]] = input.map(_.productIterator.toSeq.asInstanceOf[Seq[Double]])
只要小心,这是安全的,但它确实需要显式强制转换,而且更加冗长

如果有相对较小的固定长度元组,那么我认为最好使用基于部分函数的方法。否则,这取决于您,但我会使用shapeless,因为它是类型安全的,而且我在我的许多项目中也会使用shapeless来处理其他事情,所以对我来说是免费的:)