Scala:将Array[(String,Array[Double])]压缩为Array[(String)]



我有一个看起来像这样的数组((1,array(1.0,0.0,3.0)),(2,array(0.0,2.0,1.0)

有简单的方法吗?我想我可以做一些地图,但我还没弄清楚语法。

谢谢。

您可以这样做:

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)
}
请指定输入和输出的类型。据我所知,任务是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))

最新更新