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)
提前致谢.
如果你已经混Int和Array[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案件需要最后.)
(注意:这不是尾递归的,所以如果你的数组嵌套得非常深,它会溢出堆栈.)