2015-09-11 166 views

回答

3

不僅元組如果你知道每一個成員的類型將是(INT,INT),然後只需使用asInstanceOf

val l:List[Any] = List((0,0), (1,1), (1,3), (2,2), (3,1)) 

l.map(_.asInstanceOf[(Int, Int)]) 
+0

謝謝....它的作品! –

+1

你可以像克里斯馬丁說的那樣列出名單。您不必分別投射每個元組。 –

7

您可以使用收集的方法,所以它不會在個案名單未能包含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)} 
+0

謝謝.. !!它的工作原理:) –

+0

當我使用此代碼轉換double時,它將轉換爲Path2D.Double。它背後的原因是什麼? –

5

則可以使用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) }) 
1

使用的理解,像這

for ((a:Int,b:Int) <- xs) yield (a,b) 

這將靜靜地類型簽名不匹配的skim對[(Int,Int)]

相關問題