在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中将元组转换为数组的主要内容,如果未能解决你的问题,请参考以下文章
如何在 Spark Scala 中将 WrappedArray 转换为 List?