【问题标题】:How to create an tuple from all the Elements present in an Array如何从数组中存在的所有元素创建一个元组
【发布时间】:2023-03-30 17:22:01
【问题描述】:

我有一个数组,它是拆分函数的结果。现在我希望这个数组的所有元素都是元组的元素。

元素个数不超过22个。

【问题讨论】:

  • 你确定元组总是有固定数量的元素吗?然后你可以写一个简单的辅助方法。如果没有,您希望如何使用它?如果给定一些运行时值,元组的具体类型会有所不同。
  • 好吧,老实说,将数组转换为元组听起来不是最好的主意,原因有很多。您能否分享一下您最终想要实现的目标以及为什么需要它?也许有更好的方法。

标签: scala scala-collections


【解决方案1】:

不幸的是,您不能以类型安全的方式执行此操作。元组数量必须在编译时已知。您的数组长度仅在运行时知道,因为集合具有任意长度。

之后你可能想对这个元组做点什么。问题是您需要编写一个处理所有元组情况的代码,例如;

array match {
  case Array(first)=> ???
  case Array(first, second) => ???
  case Array(first, second, third) => ???
      ...
  case Array(first, second, third, fourth, fifth, sixth, seventh, .... twentysecond) => ???
  case _ => // What to do now?
}

之所以这样,是因为我们不知道这个数组->编译时元组操作的结果是什么,所以我们涵盖了所有情况。

如果我们知道我们的数组在编译时有多少个元素,我们可以使用Shapeless 在下面做类似的事情,就像在另一个question 中回答的那样

import shapeless._
import HList._
import syntax.std.traversable._

val x = List(1, 2, 3)
val y = x.toHList[Int::Int::Int::HNil]
val z = y.get.tupled

【讨论】:

  • 是的,我们可以在创建数组之前知道数组的大小。这是否允许轻松创建元组表单数组?
猜你喜欢
  • 1970-01-01
  • 2020-10-25
  • 1970-01-01
  • 2012-10-04
  • 1970-01-01
  • 2018-07-02
  • 2021-05-22
相关资源
最近更新 更多