您的位置:首页 > 其它

Scala:fold,foldLeft和foldRight区别与联系 reduce

2017-07-14 17:22 579 查看

Scala:fold,foldLeft和foldRight区别与联系

我们来看看最后一个函数:
reduce
。使用
reduce
我们可以处理列表的每个元素并返回一个值。通过使用
reduceLeft
reduceRight
我们可以强制处理元素的方向。(使用
reduce
方向是不被保证的)
译者注:
reduce
fold
很像,但
reduce
返回的值的类型必须和列表的元素类型相关(类型本身或其父类),但
fold
没有这种限制(但与此同时
fold
必须给定一个初始值),可以说
reduce
fold
的一种特殊情况。

scala> list1
res51: List[Int] = List(1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20)

scala> val sum = (x:Int, y:Int) => {println(x,y) ; x + y}
sum: (Int, Int) => Int = <function2>

scala> list1.reduce(sum)
(1,2)
(3,3)
(6,4)
(10,5)
(15,6)
(21,7)
(28,8)
(36,9)
(45,10)
(55,11)
(66,12)
(78,13)
(91,14)
(105,15)
(120,16)
(136,17)
(153,18)
(171,19)
(190,20)
res52: Int = 210

scala> list1.reduceLeft(sum)
(1,2)
(3,3)
(6,4)
(10,5)
(15,6)
(21,7)
(28,8)
(36,9)
(45,10)
(55,11)
(66,12)
(78,13)
(91,14)
(105,15)
(120,16)
(136,17)
(153,18)
(171,19)
(190,20)
res53: Int = 210

scala> list1.reduceRight(sum)
(19,20)
(18,39)
(17,57)
(16,74)
(15,90)
(14,105)
(13,119)
(12,132)
(11,144)
(10,155)
(9,165)
(8,174)
(7,182)
(6,189)
(5,195)
(4,200)
(3,204)
(2,207)
(1,209)
res54: Int = 210
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: