在Scala 2.10.3中,我看到了这个问题.
Welcome to Scala version 2.10.3 (Java HotSpot(TM) 64-Bit Server VM, Java 1.7.0_25).
Type in expressions to have them evaluated.
Type :help for more information.
scala> val list = List(1, 2, List(5, 6))
list: List[Any] = List(1, 2, List(5, 6))
scala> list.flatten
:9: error: No implicit view available from Any => scala.collection.GenTraversableOnce[B].
list.flatten
^
我该如何解决这个问题?
我目前的解决方法是定义我自己的平面功能.
def flat(list: List[Any]): List[Any] = list flatten {
case i: List[Any] => flat(i)
case e => List(e)
}
scala> flat(list)
res2: List[Any] = List(1, 2, 5, 6)
Jatin.. 10
嗯,这是不是一个问题,Scala 2.10.3
但由于与每一个相当版本2.8.0
时flatten
被引入.它表现得非常完美:
扁平化基本上做:
将此可遍历集合集合转换为由这些可遍历集合的元素组成的集合.
所以简而言之,你的类型A
需要有一个A => GenTraversableOnce
可以帮助你遍历它们的函数.在你的情况下:
scala> val x = List(1, 2, List(3, 4)) x: List[Any] = List(1, 2, List(3, 4))
x
是类型的List[Any]
,不可能Any
像任何人一样拥有类型的泛型函数,每个人都有自己的定义.你可以做的是:(也适用于多个嵌套列表):
def flatten(ls: List[Any]): List[Any] = ls flatMap { case i: List[_] => flatten(i) case e => List(e) } val k = List(1, List(2, 3), List(List(List(List(4)), List(5)), List(6, 7)), 8) flatten(k)
它打印 List[Any] = List(1, 2, 3, 4, 5, 6, 7, 8)