我有一个看起来像这样的数组:Array((1,Array(1.0,0.0,3.0)), (2,Array(0.0,2.0,1.0)))。我想把它转换成一个看起来像这样的数组:Array((1,1.0,0.0,3.0),(2,0.0,2.0,1.0))。有没有简便的方法可以做到这一点?我猜应该有一些映射(map)的语法,但我还没能弄清楚。谢谢!
a.map { case (a, Array(b,c,d)) => (a,b,c,d) }
scala> val a = Array((1,Array(1.0,0.0,3.0)), (2,Array(0.0,2.0,1.0)))
a: Array[(Int, Array[Double])] = Array((1,Array(1.0, 0.0, 3.0)), (2,Array(0.0, 2.0, 1.0)))
scala> a.map({ case (a, Array(b,c,d)) => (a,b,c,d) })
res4: Array[(Int, Double, Double, Double)] = Array((1,1.0,0.0,3.0), (2,0.0,2.0,1.0))
一种支持多达22元组的解决方案。当然,即使这种方法也需要假设所有数组成员具有相同的长度。
a.map {
case (a, Array(b)) => (a,b)
case (a, Array(b,c)) => (a,b,c)
case (a, Array(b,c,d)) => (a,b,c,d)
// pseudo-scala
case (n1, Array(n2,...,n22)) => (n1,n2,...,n22)
}
HList
实现,例如shapeless库中的实现。不过我对此没有经验。 - Ionuț G. StanArray
实例而不是元组实例吗?例如:Array(1, Array(2,3,4))
将变为Array(Array(1,2,3,4))
。对于具有同质元素类型的集合来说,使用HList
会过度。 - Ionuț G. Stan请指定输入和输出的类型。我理解这个任务是将Array [String,Array [Double]] => Array [Array [Double]]。
scala> val r = Array(("1", Array(1.0, 2.0, 1.0, 0.0, 3.0)), ("2", Array(0.0, 2.0, 1.0)))
r: Array[(String, Array[Double])] = Array((1,Array(1.0, 2.0, 1.0, 0.0, 3.0)), (2,Array(0.0, 2.0, 1.0)))
scala> val res = r map { case (s, Array(xs @ _*)) => (s.toDouble +: xs).toArray }
res: Array[Array[Double]] = Array(Array(1.0, 1.0, 2.0, 1.0, 0.0, 3.0), Array(2.0, 0.0, 2.0, 1.0))