scala 学习之:List fold, foldLeft方法
先从一道题开始看:
Eliminate consecutive duplicates of list elements.
If a list contains repeated elements they should be replaced with a single copy of the element. The order of the elements should not be changed.
Example: scala> compress(List('a, 'a, 'a, 'a, 'b, 'c, 'c, 'a, 'a, 'd, 'e, 'e, 'e, 'e))
res0: List[Symbol] = List('a, 'b, 'c, 'a, 'd, 'e)
题目的意思是,去除list中重复的元素, 并且保持其相对顺序。
看到这个题目,我的第一想法是,遍历list中的各个元素,将其放入到新的list中(如果新的list不包含该元素),最后返回新的list。
代码如下:
object Test {
def main(args: Array[String]): Unit = {
val a = List(, , , , , )
def deal[T](a:List[T]):List[T] = {
var tmp = List.empty[T]
a.map{ w=>
if(!tmp.contains(w)){
tmp = tmp :+ w
}
}
tmp
}
deal(a).foreach(println)
}
}
参考了该博客后: http://blog.thedigitalcatonline.com/blog/2015/04/07/99-scala-problems-08-eliminate-consecutive-duplicates/#.WBsNWPl97IU
使用flodLeft进行解决。代码如下:
def compress[T](a:List[T]):List[T] = a.foldLeft(List[T]()){
case (li, e) => if (li.isEmpty || li.last != e) li:::List(e) else li
}
compress(a).foreach(println)
fold 函数解释: 该函数接收两个参数, 第一个为初始值,在上例中即为 一个空的List[T]().
第二个参数为一个函数,上例中为{}中的内容。 然后foldleft 会一次遍历list中的元素,每个元素与初始值按照处理函数的处理后,当作新的初始值,开始下一轮遍历。
在看个例子:
val a = List(, , , )

List 中共有 fold foldLeft 和foldRight 三个函数。 其中的差别是:

scala 学习之:List fold, foldLeft方法的更多相关文章
- Scala学习笔记(三)—— 方法和函数
1. 方法 方法使用 def 定义: def 方法名(参数名:参数列表,…) :返回值类型 = { 方法结构体 } scala> def add(x : Int ,y : Int):Int = ...
- scala学习手记12 - 字段、方法和构造函数
在上一节创建了一个scala类,如果没有更多的方法,scala类的定义还可以更简单一些,看一下下面这个CreditCard类的定义: class CreditCard(val number: Int, ...
- scala学习笔记:函数与方法
http://stackoverflow.com/questions/2529184/difference-between-method-and-function-in-scala A Functio ...
- scala学习笔记4(apply方法)
class ApplyTest{ def apply() = "This apply is in class" def test{ println("test" ...
- Scala:fold,foldLeft和foldRight区别与联系 reduce
Scala:fold,foldLeft和foldRight区别与联系 我们来看看最后一个函数:reduce.使用reduce我们可以处理列表的每个元素并返回一个值.通过使用reduceLeft和red ...
- 【大数据】Scala学习笔记
第 1 章 scala的概述1 1.1 学习sdala的原因 1 1.2 Scala语言诞生小故事 1 1.3 Scala 和 Java 以及 jvm 的关系分析图 2 1.4 Scala语言的特点 ...
- Scala学习(三)——集合
基本数据结构 Scala提供了一些不错的集合. 数组 Array 数组是有序的,可以包含重复项,并且可变. val numbers = Array(1, 2, 3, 4, 5, 1, 2, 3, 4, ...
- 【Todo】【读书笔记】大数据Spark企业级实战版 & Scala学习
下了这本<大数据Spark企业级实战版>, 另外还有一本<Spark大数据处理:技术.应用与性能优化(全)> 先看前一篇. 根据书里的前言里面,对于阅读顺序的建议.先看最后的S ...
- Scala学习(九)---文件和正则表达式
文件和正则表达式 摘要: 在本篇中,你将学习如何执行常用的文件处理任务,比如从文件中读取所有行或单词,或者读取包含数字的文件等.本篇的要点包括: 1. Source.fromFile(...).get ...
随机推荐
- 去除angularjs路由的显眼的#号
在接触到angularj并完成第一个demo后,惊奇地发现居然还可以这样开发前端界面.个人喜欢的一个功能点就是ng的路由功能,可以很好地将视图放入多个文件中.但最基础的使用会给url添加一个显眼的#, ...
- 好用的一个从SharePoint导出小工具
1. 输入 Site Url(Site Collection), 然后点"load"按钮 2.选择Web后,点选需导出的文档库,然后点"Next"按钮 ...
- git将已经同步的某类文件加入忽略列表并同步
1> 添加.gitignore文件到根目录,并在文件中写入忽略文件的类型或具体路径,比如: *.zip 和 /RSGIS/SnowEffect/SnowEffect.pro.user 2> ...
- OpenCV2.3.1在Win7+VS2010下的配置过程(转)
转自:http://blog.csdn.net/mygis2005/article/details/10472717 这篇博客很好的解决了我遇到的问题,所以转到自己的博客里,方便以后进行查阅. 1. ...
- xp和win7安装telnet服务
xp: 有些ghost版本的xp会精简掉telnet服务 首先telnet服务需要的几个文件: tlntadmn.exe tlntsess.exe tlntsvr.exe tlntsvrp.dll 文 ...
- Java获取本机ip和服务器ip
一.获取服务器IP InetAddress addr = InetAddress.getLocalHost().getHostAddress();//获得本机IP 二.获取客户端本机IP String ...
- 洛谷P3392 涂国旗
P3392 涂国旗 107通过 507提交 题目提供者kkksc03 标签 难度普及- 提交 讨论 题解 最新讨论 直接读字符会wa WA?-- 为什么不对... 跪求找错 快点给钱 这不就是荷兰 ...
- where 子句中使用通配符
模糊匹配 ------------------------模糊匹配----------------- '[1-9]'.'[a-z]'.'[^4]' select * from student wher ...
- 关于Hibernate XXX is not mapped 错误
我的实体类是这么配置的 @Entity(name="EntityName") //必须,name为可选,对应数据库中一的个表 就会出现 XXX is not mapped. ...
- Android7.0 新特性
删除了三个隐式广播 1.监听网络变化的广播 CONNECTIVITY_ACTION,在Manifest.xml中注册的 不会受到,在前台运行的程序 registerReceiver()注册的广播可以接 ...