gpt4 book ai didi

scala - 如何解决 Scala 2.10.x 扁平化问题

转载 作者:行者123 更新时间:2023-12-01 23:17:05 26 4
gpt4 key购买 nike

在 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
<console>: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)

最佳答案

嗯,这不是 Scala 2.10.3 的问题,而是自 2.8.0 引入 flatten 以来的每个版本的问题。它的表现完美,正如它应该的那样:

flatten基本上是:

Converts this collection of traversable collections into a collection formed by the elements of these traversable collections.

因此,简而言之,您的类型 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)

关于scala - 如何解决 Scala 2.10.x 扁平化问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21323170/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com