【问题标题】:Convert Vector to Tuple scala将向量转换为元组
【发布时间】:2015-01-25 16:09:30
【问题描述】:

是否可以将异构向量的向量转换为 Scala 中的 Tuple3 列表

Vector(Vector(1,"a","b"),Vector(2,"b","c")) to List(Tuple3(1,"a","b"),Tuple3(2,"b","c"))

【问题讨论】:

    标签: scala scala-collections scala-2.10 scalaz7


    【解决方案1】:

    将每个内部Vector 显式转换为Tuple3

    vector.map {
        case Vector(f, s, t) => Tuple3(f, s, t)
    }.toList
    

    如果您有可变大小的向量,您可以使用更通用的方法:

    def toTuple(seq: Seq[_]): Product = {
      val clz = Class.forName("scala.Tuple" + seq.size)
      clz.getConstructors()(0).newInstance(seq.map(_.asInstanceOf[AnyRef]): _*).asInstanceOf[Product]
    }
    
    vector.map(toTuple).toList
    

    但它有限制:向量的最大长度为 22。

    【讨论】:

    • 可以显式映射它,因为数据库驱动程序返回一个可变大小的向量向量,即它取决于执行的查询类型......如果它从表中选择 a,b,它是一个大小向量2 代表选择的 2 列,依此类推...有没有办法在不考虑大小的情况下进行映射
    • 如果向量长度不是 3,您希望如何生成 Tuple3s?
    • @ChrisMartin 的问题是关于 Tuple3。我同意你的观点,可变大小的向量需要更通用的解决方案。
    • @SergeyLagutin 我正在回复 user2780187(抱歉,不清楚)。
    • 这里的重点是 AnyRef :) 因为问题需要解决异构向量的解决方案......因为数据库行包含可变参数类型
    猜你喜欢
    • 2023-04-07
    • 2011-01-06
    • 1970-01-01
    • 1970-01-01
    • 2013-03-30
    • 2013-05-10
    • 2020-12-08
    • 1970-01-01
    相关资源
    最近更新 更多