包含重复关系操作类的模块,此模快的方法都是通过 each 定义的,所以包含此模块的类必须定义 each 方法。
当所有的项目都为真时返回 true。若任一项目为伪则返回 false。
使用区块时,则依次以各个元素执行区块的计算,若所有的结果都是真则返回 true,一旦区块返回伪时,立刻返回 false。
p [1,2,3].all? {|v| v > 0} # => true p [1,2,3].all? {|v| v > 1} # => false
当所有的项目都为伪时返回 false。若任一项目为真则返回 true。
使用区块时,则依次以各个元素执行区块的计算,若所有的结果都是伪则返回 false,一旦区块返回真时,立刻返回 true。
p [1,2,3].any? {|v| v > 3} # => false p [1,2,3].any? {|v| v > 1} # => true
以数组的形式返回所有区块的计算结果。
依次以各个元素执行区块的计算,返回第一个计算为 true 的项目。若没有项目计算为 true,则返回 nil。
依次以各个元素执行区块的计算,将所有计算为 true 的项目以数组形式返回。若没有项目计算为 true,则返回空数组。
当列表中任一项目符合 val == 时,返回 true。
再执行区块之前,将 init 的初始值和一个 item 确定为参数。在第二次和随后的循环中,将上一次区块的运算结果和下一个 item 作为参数,随后继续执行区块。最后一个 item 也作为参数后,返回最后一次区块运算得出的结果。
如果一个 item 是空的,那么就返回 init 。
如果没有设置参数 init 的初始值,则将第一、第二个 item 传递给区块。假如只有一个 item 被定义的话,那么区块不会被执行,第一个 item 会被返回。如果没有 item 被定义,那么就会返回 nil 。
运算结果:
p [1,2,3,4,5].inject(0) {|result, item| result + item } => 15
它等同于下面的代码:
result = 0 [1,2,3,4,5].each {|v| result += v } p result => 15
返回最大的项目,前提是所有的项目都能够使用 <=> 方法做比较。
依次将各个项目与区块的计算结果比较并返回最大的项目。
要求区块的计算值为:a > b 时计算值为正整数、 a == b 时为 0、a < b 时为负整数。若区块返回非整数数值,则抛出 TypeError 异常。
将各个区块的结果计算出来后,返回最大的那个项目,如果参数为空,那么就返回nil。(前提是所有的项目都能够使用 <=> 方法做比较。)
返回最小的项目,前提是所有的项目都能够使用 <=> 方法做比较。
依次将各个项目与区块的计算结果比较并返回最小的项目。
要求区块的计算值为:a > b 时计算值为正整数、 a == b 时为 0、a < b 时为负整数。若区块返回非整数数值,则抛出 TypeError 异常。
将各个区块的结果计算出来后,返回最小的那个项目,如果参数为空,那么就返回nil。(前提是所有的项目都能够使用 <=> 方法做比较。)
将所有项目依照升序排列后,生成并返回包含所有项目的数组。
若没有使用区块,则调用 <=> 比较来进行排序。
若想调用其他非 <=> 的方法进行排序,就使用区块,以区块的计算结果进行排序。要求区块的计算值为:a > b 时计算值为正整数、 a == b 时为 0、a < b 时为负整数。若区块返回非整数数值,则抛出 TypeError 异常。
将所有区块按照计算结果进行升序排列,生成并返回一个包含所有项目的新数组。
返回包含所有项目的数组。