如何展平任何深度的嵌套数组数组?
例如
val in = Array( 1, Array(2,3), 4, Array(Array(5)) )
将被夷为平地
val out = Array(1,2,3,4,5)
先谢谢。
答案 0 :(得分:9)
如果您混合使用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])
}
如果你不知道你的嵌套数组中有什么,你可以用Int
替换上面的Any
并得到一个单Array[Any]
的结果。 (编辑:Any
案例需要最后一次。)
(注意:这不是尾递归的,所以如果你的数组嵌套得非常深,它会溢出堆栈。)