reduce方法

API里面这样写

reduce(initial, sym) → obj                              reduce(初始值,符号)

reduce(sym) → obj           reduce(符号)

reduce(initial) { |memo, obj| block } → obj reduce(初始值){ |memo , 对象|  块}

reduce { |memo, obj| block } → obj       reduce{ |memo, 对象| 块}

Combines all elements of enum by applying a binary operation, specified by a block or a symbol that names a method or operator.

由块或符号命名的一个方法或者操作,通过执行一个二进制操作,将所有枚举的元素结合起来

If you specify a block, then for each element in enum the block is passed an accumulator value (memo) and the element. If you specify a symbol instead, then each element in the collection will be passed to the named method of memo. In either case, the result becomes the new value for memo. At the end of the iteration, the final value of memo is the return value for the method.

如果你指定了一个块,那么集合里的每个元素被传递给一个收集器(memo,这里是一个元素)里存放的值。如果你指定的是一个符号,那么每个元素将会被传递给一个memo(这时是一个方法)。无论用哪种方法,结果都会变成memo里存放的新值。迭代到最后,memo的将值返回给方法。

If you do not explicitly specify an initial value for memo, then the first element of collection is used as the initial value of memo.

如果你未明确初始化memo的值,那么memo将会被赋值为集合内的第一个元素。

通过上面的理解,我们知道memo就是用来存放结果值的一个值或者方法。

# Sum some numbers   累加
(5..10).reduce(:+)                             #=> 45   #(5..10).reduce(符号)
# Same using a block and inject        累加
(5..10).inject { |sum, n| sum + n }            #=> 45  #(5..10).inject{ |memo, 对象| 块 }
# Multiply some numbers        阶乘
(5..10).reduce(1, :*)                          #=> 151200#(5..10).redeuce(初始值,符号)

# Same using a block           阶乘
(5..10).inject(1) { |product, n| product * n } #=> 151200#(5..10).inject(初始值){ |memo , 对象| 块}
# find the longest word
longest = %w{ cat sheep bear }.inject do |memo, word|
   memo.length > word.length ? memo : word
endlongest                                        #=> "sheep"#这个也是利用块,我们可以把代码加上{}
longest = %w{ cat sheep bear }.inject {   |memo, word| memo.length > word.length ? memo : word }#现在很好理解了,其实是一个道理,可以这么用就是,理解了这个用法,对写程序的能力提高很大的帮助,%w的意思是将{ cat sheep bear }变为["cat", "sheep", "bear"]。

看到例子中用了inject方法,我们再来看看inject方法是怎么介绍的

去查了下,API里面的介绍相同,如下

inject(initial, sym) → obj

inject(sym) → obj

inject(initial) { |memo, obj| block } → obj

inject { |memo, obj| block } → obj

Combines all elements of enum by applying a binary operation, specified by a block or a symbol that names a method or operator.

If you specify a block, then for each element in enum the block is passed an accumulator value (memo) and the element. If you specify a symbol instead, then each element in the collection will be passed to the named method of memo. In either case, the result becomes the new value for memo. At the end of the iteration, the final value of memo is the return value for the method.

If you do not explicitly specify an initial value for memo, then the first element of collection is used as the initial value of memo.

时间: 2024-11-08 16:23:14

reduce方法的相关文章

es 5 数组reduce方法记忆

reduce() 方法接收一个函数作为累加器(accumulator),数组中的每个值(从左到右)开始合并,最终为一个值. 概念:对数组中的所有元素调用指定的回调函数.该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供. 语法: array1.reduce(callbackfn[, initialValue]) 参数: 参数 定义 array1 必需.一个数组对象. callbackfn 必需.一个接受最多四个参数的函数.对于数组中的每个元素,reduce 方法都会调

ruby reduce方法

Ruby 中一些好用的方法(注意reduce方法) 2016-07-27 17:57 370人阅读 评论(0) 收藏 举报 #####inject inject是我使用最频繁的方法了,它的强大之处在于可以方便的对嵌套的数组,哈希等混合数据结构进行合并或求和, 可以有效减少代码量. 例如最常见的数组套哈希: 1 2 3 4 array = [{a:100}, {b:200}, {c:300}] array.inject(0) { |sum, e| sum += e.values.first } #

reduce 方法 (Array) (JavaScript)

对数组中的所有元素调用指定的回调函数.该回调函数的返回值为累积结果,并且此返回值在下一次调用该回调函数时作为参数提供. 语法 array1.reduce(callbackfn[, initialValue]) 参数 参数 定义 array1 必需.一个数组对象. callbackfn 必需.一个接受最多四个参数的函数.对于数组中的每个元素,reduce 方法都会调用 callbackfn 函数一次. initialValue 可选.如果指定 initialValue,则它将用作初始值来启动累积.

Java8中聚合操作collect、reduce方法详解

Stream的基本概念 Stream和集合的区别: Stream不会自己存储元素.元素储存在底层集合或者根据需要产生.Stream操作符不会改变源对象.相反,它会返回一个持有结果的新的Stream.3.Stream操作可能是延迟执行的,这意味着它们会等到需要结果的时候才执行.Stream操作的基本过程,可以归结为3个部分: 创建一个Stream.在一个或者多个操作中,将指定的Stream转换为另一个Stream的中间操作.通过终止(terminal)方法来产生一个结果.该操作会强制它之前的延时操

JavaScript - reduce方法 (Array)

JavaScript - reduce方法 (Array) 解释:reduce() 方法接收一个函数作为累加器(accumulator),数组 中的每个值(从左到右)开始合并,最终为一个值. 语法:arr.reduce(callback,[initialValue]) 参数: callback:执行数组中每个值的函数,包含四个参数 previousValue:上一次调用回调返回的值,或者是提供的初始值(initialValue) currentValue:数组中当前被处理的元素 index:当前

在JavaScript函数式编程里使用Map和Reduce方法

所有人都谈论道workflows支持ECMAScript6里出现的令人吃惊的新特性,因此我们很容易忘掉ECMAScript5带给我们一些很棒的工具方法来支持在JavaScript里进行函数编程,这些工具方法我们现在可以使用了.在这些函数方法里主要的是基于JavaScript 数组对象的map()方法和reduce()方法. 如果你如今还没有使用map()和reduce()方法,那么现在是时候开始使用了.如今绝大部分的JavaScript开发平台都与生俱来的支持ECMAScript5.使用Map方

reduce 方法(升序)

语法: array1.reduce(callbackfn[, initialValue]) 参数 定义 array1 必需.一个数组对象. callbackfn 必需.一个接受最多四个参数的函数.对于数组中的每个元素,reduce 方法都会调用 callbackfn 函数一次. initialValue 可选.如果指定 initialValue,则它将用作初始值来启动累积.第一次调用 callbackfn 函数会将此值作为参数而非数组值提供 返回值: 通过最后一次调用回调函数获得的累积结果. 异

map和reduce方法理解

1.map方法{ 1.使用map方法需要两个参数(函数,列表){ 1.参数要求:函数必须是作用于一个元素的 2.例如:map(str,[1,2,3]){ 返回结果:['1','2','3'] } } 2.返回的是一个列表 } 2.reduce方法{ 1.使用reduce方法需要两个参数(函数,列表){ 1.参数要求:函数必须作用于两个元素的,并且返回一个元素作为列表元素,直到列表元素剩下最后一个元素 2.例如{ def add(x,y): return x + y reduce(add,[1,2

reduce()方法

1.reduce()方法概述 reduce方法有两个参数,第一个参数是一个callback,用于针对数组项的操作:第二个参数则是传入的初始值,这个初始值用于单个数组项的操作.需要注意的是,reduce方法返回值并不是数组,而是形如初始值的经过叠加处理后的操作. 1 /* 2 数组元素求和 3 */ 4 var arr = [1, 2, 3, 4, 5]; 5 6 var reducer = function add(sum, num) { return sum + num; }; 7 8 var

js数组中reduce方法

reduce() 方法 相当于一个函数累加器,接受一个回调函数的结果,然后将前一次的函数结果再和下一次的数据再次执行此回调函数. reduce(function(previousValue,currentValue,index,array){ return xxx  //需要执行的函数结果, previousValue---------上一次的值- currentValue---------当前值 index------当前值的索引 array-------数组 }): [1,2,3,4,5].