2015-09-11 119 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)]

相关问题