32.scala编程思想笔记——map和reduce

32.scala编程思想笔记——map和reduce

欢迎转载,转载请标明出处:http://blog.csdn.net/notbaron/article/details/50445777
源码下载连接请见第一篇笔记。

Map接受参数,一个接受单个参数并产生返回值的函数,并将其应用于序列中的每个元素。

与foreach 相似,但是map可以捕获每次调用时的返回值,并将其存储到一个以map作为返回值而产生的新序列中。

例如,对Vector中每个元素都加1的例子:

import com.atomicscala.AtomicTest._

 

val v = Vector(1, 2, 3, 4)

v.map(n => n + 1) is Vector(2, 3, 4, 5)

输出如下:

Vector(2, 3, 4, 5)

 

如果需要将序列中所有值加起来的方式:

例如:

import com.atomicscala.AtomicTest._

 

val v = Vector(1, 10 , 100, 1000)

var sum = 0

v.foreach(x => sum += x)

sum is 1111

输出如下:

1111

实现来起来虽然也不错,但是用reduce更好。

Reduce使用参数,来组合序列中所有元素,产生更加整洁的序列求和方式:

import com.atomicscala.AtomicTest._

 

val v = Vector(1, 10, 100, 1000)

v.reduce((sum, n) => sum + n) is 1111

输出如下:

1111

Reduce可以再序列上执行所有种类的操作。并未限制其只能作用于Int或者只能做加法。

例如:

import com.atomicscala.AtomicTest._

 

(1 to 100).reduce((sum, n) => sum + n) is

  5050

val v2 = Vector("D", "u","c", "k")

v2.reduce((sum, n) => sum + n) is "Duck"

         注意:map和reduce的作用相当于正常情况下手写的迭代代码。

         函数式编程的重要标志之一就是map,reduce,foreach。

         当然可以自己编写这样的代码,但是直接使用这些代码可以创建更健壮的代码。

你可能感兴趣的:(scala编程思想)