如何在Scala中展平数组

时间:2018-06-10 08:27:37

标签: arrays scala flatten

我有这样的数组:

val a = Array(1,Array(1,2))

想获得像Array(1,1,2)

这样的结果

似乎a.flatten无效。我收到了一个错误:No implicit view available from Any => Traversable[U].

我该怎么做?

2 个答案:

答案 0 :(得分:0)

您可以使用flatMap,如下所示:

a.flatMap {
  case x: Int => Array(x)
  case a: Array[Int] => a
}

答案 1 :(得分:0)

如果您不熟悉flatMap功能,那么您可以使用map和flatten函数执行相同的任务。

首先使用地图功能和模式匹配

Array[Any]转换为Array[Array[Int]]
val arr = Array(1, 2, Array(3, 4))
val arrOfArrs = arr.map { element => 
   element match {
     case element:Int=>Array(element)
     case element:Array[Int]=>element
   }
}

上述代码的示例输出将是

arrOfArrs: Array[Array[Int]] = Array(Array(1), Array(2), Array(3, 4))

现在,您可以使用flatten函数

轻松压缩arrOfArrs
arrOfArrs.flatten
res3: Array[Int] = Array(1, 2, 3, 4)