在Scala中将元组转换为数组

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了在Scala中将元组转换为数组相关的知识,希望对你有一定的参考价值。

在Scala中将元组转换为数组的最佳方法是什么?这里“最好”意味着尽可能少的代码行。我很震惊地搜索谷歌和StackOverflow只是为了找不到这个主题,这似乎应该是微不足道和常见的。列表具有toArray功能;为什么不元组?

答案

使用productIterator,紧接着是toArray

(42, 3.14, "hello", true).productIterator.toArray

得到:

res0: Array[Any] = Array(42, 3.14, hello, true)

结果的类型显示了它很少使用的主要原因:在元组中,元素的类型可以是异构的,在数组中它们必须是同构的,因此在转换期间通常会丢失太多的类型信息。如果你想这样做,那么你可能不应该首先将你的信息存储在元组中。

几乎没有什么可以(安全地)使用Array[Any],除了将其打印出来,或将其转换为更加简洁的Set[Any]。相反,你可以使用:

  • 属于共同密封特征的案例类别列表,
  • 无形的HLists,
  • 精心挑选的基类,带有一点继承,
  • 或者至少在运行时保留某种模式的东西(比如Apache Spark Datasets)

他们都是更好的选择。

在一个不太可能的情况下,你经常处理的“元组”的元素经常变成信息最少的上限类型,那么可能是因为你没有使用普通元组,但是有某种可遍历的限制节点中子结构数量的数据结构。在这种情况下,你应该考虑为结构实现类似Traverse接口的东西,而不是手动搞乱一些“元组”。

以上是关于在Scala中将元组转换为数组的主要内容,如果未能解决你的问题,请参考以下文章

如何在 Scala 中将 RDD 转换为二维数组?

在 Clojure 中将元组数组转换为哈希映射

如何在 Spark Scala 中将 WrappedArray 转换为 List?

如何对 spark scala RDD 中的元组列表/数组执行转换?

在元组列表(SCALA)中将所有具有相同日期的双精度加起来

如何在 scala 中将 RDD[(int, string)] 转换为 Dataframe