如何解决Scala 2.10.x flatten问题

 随遇而安gqS1 发布于 2023-01-31 17:16

在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.0flatten被引入.它表现得非常完美:

扁平化基本上做:

将此可遍历集合集合转换为由这些可遍历集合的元素组成的集合.

所以简而言之,你的类型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)

撰写答案
今天,你开发时遇到什么问题呢?
立即提问
热门标签
PHP1.CN | 中国最专业的PHP中文社区 | PNG素材下载 | DevBox开发工具箱 | json解析格式化 |PHP资讯 | PHP教程 | 数据库技术 | 服务器技术 | 前端开发技术 | PHP框架 | 开发工具 | 在线工具
Copyright © 1998 - 2020 PHP1.CN. All Rights Reserved 京公网安备 11010802041100号 | 京ICP备19059560号-4 | PHP1.CN 第一PHP社区 版权所有