我想創建Any
類型,它看起來像的數組:圖案上嵌套數組匹配Scala中
val arr: Array[Any] = Array(Array(1, 2, Array(3)), 4)
然後我想使它變平使用尾遞歸與此代碼:
def flatten(xs: Array[Any]): Array[Any] = {
@tailrec
def makeFlat(xs: List[Any], res: List[Any]): List[Any] = xs match {
case Nil => res
case head :: tail => head match {
case h: Array[Any] => makeFlat(h.toList ::: tail, res)
case _ => makeFlat(tail, res :+ head)
}
}
makeFlat(xs.toList, Nil).toArray
}
我正在使用Scala 2.12版本。
當從源數組迭代到內部數組Array(3)
時,模式匹配case h: Array[Any]
不起作用。這很奇怪,因爲Int
延伸了Any
。我試過調試並意識到這個數組是int[1]
(原始int數組)。
爲什麼scala決定將它作爲原始數組,並且我如何能夠找出這種情況?
Scala的推斷陣列(3)爲ARRAY [INT]的類型,因爲你只在其中存儲一個Int。您的Array [Any]類型僅指頂層數組。 val arr:Array [Any] = Array(Array(1,2,Array [Any](3)),4)將爲Array(3)創建一個Array [Any]。 – sheunis