如何展平任何深度的嵌套数组?
例如
val in = Array( 1,Array(2,3),4,Array(Array(5)) )
会被夷为平地
val out = Array(1,2,3,5)
提前致谢.
解决方法
如果你有混合的Int和Array [Int],这不是一个好主意,你可以做类似的事情
in.flatMap{ case i: Int => Array(i); case ai: Array[Int] => ai }
(如果你在数组中添加了其他内容,它将抛出异常).因此,您可以将此作为递归函数的基础:
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]) }
如果您不知道嵌套数组中的内容,可以用Any替换上面的Ints,并得到一个平面数组[Any]. (编辑:任何情况都需要最后.)
(注意:这不是尾递归的,所以如果你的数组嵌套得非常深,它会溢出堆栈.)