在Scala中将元组转换为数组的最佳方法是什么?这里的“最佳”是指尽可能少的代码行。我震惊地搜索了Google和StackOverflow,却发现这个话题一无所获,这似乎应该是微不足道的和普遍的。列表具有toArray
函数;为什么不元组?
答案 0 :(得分:7)
使用productIterator
,然后紧跟toArray
:
(42, 3.14, "hello", true).productIterator.toArray
给予:
res0: Array[Any] = Array(42, 3.14, hello, true)
结果的类型表明了它很少使用的主要原因:在元组中,元素的类型可以是异构的,在数组中,它们必须是同质的,因此在此转换期间通常会丢失太多的类型信息。如果要执行此操作,则可能首先不应该将信息存储在元组中。
Array[Any]
几乎(安全)无能为力,除非将其打印出来或将其转换为更简陋的Set[Any]
。相反,您可以使用:
它们都是更好的选择。
在不太可能的情况下,您正在处理的“元组”的元素经常具有信息量最少的上限类型,那么它可能是,因为您没有工作具有简单的元组,但具有某种可遍历的数据结构,从而限制了节点中子结构的数量。在这种情况下,您应该考虑为结构实现类似Traverse
的接口,而不是手动弄乱一些“元组”。