我有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)]
。
谢谢....它的作品! –
你可以像克里斯马丁说的那样列出名单。您不必分别投射每个元组。 –