我有List[Any]
具有值如何在Scala中將List [Any]轉換爲List(Int,Int)?
List((0,0), (1,1), (1,3), (2,2), (3,1))
我想把它轉換成
List[(Int,Int)]
我怎樣才能做到這一點?
我有List[Any]
具有值如何在Scala中將List [Any]轉換爲List(Int,Int)?
List((0,0), (1,1), (1,3), (2,2), (3,1))
我想把它轉換成
List[(Int,Int)]
我怎樣才能做到這一點?
不僅元組如果你知道每一個成員的類型將是(INT,INT),然後只需使用asInstanceOf
:
val l:List[Any] = List((0,0), (1,1), (1,3), (2,2), (3,1))
l.map(_.asInstanceOf[(Int, Int)])
您可以使用收集的方法,所以它不會在個案名單未能包含INTS
val l: List[Any] = List((0,0), (1,1), (1,3), (2,2), (3,1))
l.collect{ case (a: Int, b: Int) => (a,b)}
謝謝.. !!它的工作原理:) –
當我使用此代碼轉換double時,它將轉換爲Path2D.Double。它背後的原因是什麼? –
則可以使用asInstanceOf
只投。
scala> val a: List[Any] = List((0,0), (1,1), (1,3), (2,2), (3,1))
a: List[Any] = List((0,0), (1,1), (1,3), (2,2), (3,1))
scala> a.asInstanceOf[List[(Int, Int)]]
res0: List[(Int, Int)] = List((0,0), (1,1), (1,3), (2,2), (3,1))
雖然這是部分擦除的危險。看看它是如何創造heap pollution:
scala> val a: List[Any] = List((0,0), (1,1), "abc")
a: List[Any] = List((0,0), (1,1), abc)
scala> a.asInstanceOf[List[(Int, Int)]]
res0: List[(Int, Int)] = List((0,0), (1,1), abc)
如果性能是一個大問題在這裏所以做此而已。否則,我更喜歡其他兩個答案中的一個(總結如下)。
如果你想在ClassCastException
(@mattinbits's answer)形式的失敗:
a.map(_.asInstanceOf[(Int, Int)])
如果你想失敗傳遞在默默(@grotrianster's answer):
a.collect({ case (a: Int, b: Int) => (a, b) })
使用的理解,像這
for ((a:Int,b:Int) <- xs) yield (a,b)
這將靜靜地類型簽名不匹配的skim對[(Int,Int)]
。
謝謝....它的作品! –
你可以像克里斯馬丁說的那樣列出名單。您不必分別投射每個元組。 –