我有一个看起来像这个数组((1,数组(1.0,0.0,3.0)),(2,数组(0.0,2.0,1.0)))的数组,我想变成和看起来像的数组:数组((1,1.0,0.0,3.0),(2,0.0,2.0,1.0))。
有一种简单的方法吗?我猜我可以做某种地图,但我无法弄清楚语法。
感谢。
答案 0 :(得分:4)
你可以这样做:
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)
}
答案 1 :(得分:3)
请指定输入和输出的类型。据我所知,任务是Array [String,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))