将 Array[(Double,Double)] 转换为 Seq[Seq[Double]]
Converting Array[(Double,Double)] to Seq[Seq[Double]]
我是 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) }
不幸的是,在标准库中没有通用的方法可以将元组类型安全地转换为列表。但是,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 中的所有元组都实现了 Product 特性,因此可以作为 Any
:
的集合进行迭代
val input: Array[(Double, Double)] = ...
val output: Seq[Seq[Double]] = input.map(_.productIterator.toSeq.asInstanceOf[Seq[Double]])
只要小心,这是安全的,但它确实需要显式转换,而且比较冗长。
如果您有相对较小的固定长度元组,那么我认为最好使用基于部分函数的方法。否则,由你决定,但我会使用 shapeless,因为它是类型安全的,而且我还在我的许多项目中使用 shapeless 来做其他事情,所以它对我来说是免费的:)
我是 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) }
不幸的是,在标准库中没有通用的方法可以将元组类型安全地转换为列表。但是,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 中的所有元组都实现了 Product 特性,因此可以作为 Any
:
val input: Array[(Double, Double)] = ...
val output: Seq[Seq[Double]] = input.map(_.productIterator.toSeq.asInstanceOf[Seq[Double]])
只要小心,这是安全的,但它确实需要显式转换,而且比较冗长。
如果您有相对较小的固定长度元组,那么我认为最好使用基于部分函数的方法。否则,由你决定,但我会使用 shapeless,因为它是类型安全的,而且我还在我的许多项目中使用 shapeless 来做其他事情,所以它对我来说是免费的:)