scala进阶笔记:函数组合器(combinator)
2015-06-10 11:57
323 查看
collection基础参见之前的博文scala快速学习(二)。
本文主要是组合器(combinator),因为在实际中发现很有用。主要参考:http://www.importnew.com/3673.html
特点:组合器的参数都是一个函数,这个函数的输入输出都是列表元素。最常见的方式是匿名函数用=>定义,左边输入右边输出。
Ps:区分,<- 主要是迭代里用,->主要是map里用,=>主要是匿名函数用。
map:在List中的每个元素上计算一个函数,并且返回一个包含相同数目元素的List。
foreach:foreach和map使用方法相似,只不过它没有返回值,foreach是为了对原List操作。
filter:移除任何使得传入的函数返回false的元素。所以函数参数是断言函数(返回Boolean类型的函数一般都称为断言函数)。
zip:把两个List的元素合成一个由元素对组成的List里。
find:返回集合里第一个匹配断言函数的元素。
drop:丢弃前i个元素。
fold,foldLeft,foldRight:累计操作。 List中的fold方法需要输入两个参数:初始值以及一个函数。输入的函数也需要输入两个参数:累加值和当前item的索引。fold不定次序,foldLeft从左向右。
flatten: 把嵌套的结构展开。
flatMap: 一个常用的combinator,它结合了map和flatten的功能。flatMap接收一个可以处理嵌套列表的函数,然后把返回结果连接起来。
上面所展示的所有函数组合器都能对Map进行处理,看作是由键值对组成的列表,这样你写的函数就可以对Map里的key和value进行处理。可以用一个模式匹配来优雅地获取key和value。
本文主要是组合器(combinator),因为在实际中发现很有用。主要参考:http://www.importnew.com/3673.html
List(1,2,3) map squared会在列表的每个元素上分别应用
squared函数,并且返回一个新的列表,可能是
List(1,4,9)。我们把类似于
map这样的操作称为组合器。
特点:组合器的参数都是一个函数,这个函数的输入输出都是列表元素。最常见的方式是匿名函数用=>定义,左边输入右边输出。
Ps:区分,<- 主要是迭代里用,->主要是map里用,=>主要是匿名函数用。
map:在List中的每个元素上计算一个函数,并且返回一个包含相同数目元素的List。
scala> numbers.map((i: Int) => i * 2) res0: List[Int] = List(2, 4, 6, 8) scala> def timesTwo(i: Int): Int = i * 2 timesTwo: (i: Int)Int scala> numbers.map(timesTwo _) res0: List[Int] = List(2, 4, 6, 8)
foreach:foreach和map使用方法相似,只不过它没有返回值,foreach是为了对原List操作。
filter:移除任何使得传入的函数返回false的元素。所以函数参数是断言函数(返回Boolean类型的函数一般都称为断言函数)。
zip:把两个List的元素合成一个由元素对组成的List里。
scala> List(1, 2, 3).zip(List("a", "b", "c")) res0: List[(Int, String)] = List((1,a), (2,b), (3,c))
partition:根据断言函数的返回值对列表进行拆分。
scala> val numbers = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10) scala> numbers.partition(_ %2 == 0) res0: (List[Int], List[Int]) = (List(2, 4, 6, 8, 10),List(1, 3, 5, 7, 9))
find:返回集合里第一个匹配断言函数的元素。
drop:丢弃前i个元素。
dropWhile:移除前几个匹配断言函数的元素。
fold,foldLeft,foldRight:累计操作。 List中的fold方法需要输入两个参数:初始值以及一个函数。输入的函数也需要输入两个参数:累加值和当前item的索引。fold不定次序,foldLeft从左向右。
flatten: 把嵌套的结构展开。
scala> List(List(1, 2), List(3, 4)).flatten res0: List[Int] = List(1, 2, 3, 4)
flatMap: 一个常用的combinator,它结合了map和flatten的功能。flatMap接收一个可以处理嵌套列表的函数,然后把返回结果连接起来。
scala> val nestedNumbers = List(List(1, 2), List(3, 4)) nestedNumbers: List[List[Int]] = List(List(1, 2), List(3, 4)) scala> nestedNumbers.flatMap(x => x.map(_ * 2)) res0: List[Int] = List(2, 4, 6, 8)
上面所展示的所有函数组合器都能对Map进行处理,看作是由键值对组成的列表,这样你写的函数就可以对Map里的key和value进行处理。可以用一个模式匹配来优雅地获取key和value。
scala> extensions.filter({case (name, extension) => extension < 200}) res0: scala.collection.immutable.Map[String,Int] = Map((steve,100), (bob,101))
相关文章推荐
- webservice篇:其中关于调用外界数据,读取返回数据
- Spring单元测试
- Apache学习路线
- Python学习笔记 -- 序列(二)字符串
- Android 中各种权限深入体验及详解
- 下拉刷新 SVPullToRefresh 的使用及两个比较优秀的第三方下拉刷新
- [eetcode 10]Regular Expression Matching
- Eclipse svn 删除本地与svn上的文件
- Linux系统下Qt环境搭建(Ubuntu10.04)
- (cLion、RubyMine、PyCharm、WebStorm、PhpStorm、Appcode、Clion、Idea) 万能破解,获取自己的注册码
- log4net 使用指南,最常遇到的问题整理。。。
- 在JS中操作时间之getUTCMilliseconds()方法的使用
- Universal Fighting Game Guide: Understanding Combo Systems Part 1 – The Elements
- Thunderhead Engineering PyroSim 2015.2.0604 Win64 1CD火灾消防动态模拟
- Android调用另一个程序的方法
- 20150609类和对象_练习
- 初窥Linux 之 我最常用的20条命令
- A1、A2、A3、A4纸都是多大尺寸
- xfire
- 凯云水利水电工程造价管理系统 技术解释(十二) 中间单价(三)