Scala嵌套数组展平

elm*_*elm 4 arrays collections scala flatten

如何展平任何深度的嵌套数组?

例如

val in = Array( 1, Array(2,3), 4, Array(Array(5)) )
Run Code Online (Sandbox Code Playgroud)

会被夷为平地

val out = Array(1,2,3,4,5)
Run Code Online (Sandbox Code Playgroud)

提前致谢.

Rex*_*err 9

如果你已经混IntArray[Int],这是不是一开始就有一个非常好的主意,你可以这样做

in.flatMap{ case i: Int => Array(i); case ai: Array[Int] => ai }
Run Code Online (Sandbox Code Playgroud)

(如果你在数组中添加了其他内容,它将抛出异常).因此,您可以将此作为递归函数的基础:

def flatInt(in: Array[Any]): Array[Int] = in.flatMap{
  case i: Int => Array(i)
  case ai: Array[Int] => ai
  case x: Array[_] => flatInt(x.toArray[Any])
}
Run Code Online (Sandbox Code Playgroud)

如果你不知道你的嵌套数组中有什么,你可以替换上面的Ints Any并得到一个平面Array[Any].(编辑:Any案件需要最后.)

(注意:这不是尾递归的,所以如果你的数组嵌套得非常深,它会溢出堆栈.)