代码之家  ›  专栏  ›  技术社区  ›  Bishamon Ten

如何从数组中存在的所有元素创建元组

  •  0
  • Bishamon Ten  · 技术社区  · 4 年前

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

    元素的数量不超过22个。

    0 回复  |  直到 4 年前
        1
  •  1
  •   Deliganli    4 年前

    不幸的是,你不能以类型安全的方式做到这一点。在编译时必须知道元组性。数组的长度只有在运行时才知道,因为集合的长度是任意的。

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

    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