Coursera Scala 5-5 List:Reduction of Lists
另一个list常用的操作是:连结集合元素。例如sum(list)
ReduceLeft
使用ReduceLeft可以很方便的编写通用的连结方法
def sum(xs: List[Int]) = (0 :: xs) reduceLeft ((x,y) => x+y)
def product(xs : List[Int]) = (1 :: xs) reduceLeft((x,y) => x*y)
FoldLeft
reduceLeft不能处理Nil 一般用foldLeft代替使用
FoldLeft比ReduceLeft多一个累积器
def sum(xs: List[Int]) = (xs foldLeft 0) (_+_)
def product(xs : List[Int]) = (xs foldLeft 1) (_+_)
以及foldRight
注意foldLeft和foldRight并不一定能通用
原因在于
foldLeft中 累加器在参数左
foldRight中 累加器在参数右
累加器的类型是U List的类型是T
foldLeft是:
U T
U T
U T
而foldRight则是
T U
T U
U T
也就是一个操作符的问题 例如:: 左边是要T的 而右边是List[T] 注意一下缩写的op函数就可以了
foldLeft中累加器是第一个参数 元素是第二个参数
foldRight中累加器是第二个参数 元素是第一个参数