什么是红宝石相当于Linq Aggregate方法。它的工作原理是这样的
var factorial = new[] { 1, 2, 3, 4, 5 }.Aggregate((acc, i) => acc * i);
每次将数组序列中的值传递给lambda时,变量acc都会累积。
答案 0 :(得分:14)
这通常被称为数学中的 fold 以及几乎任何编程语言。它是 catamorphism 的更一般概念的一个实例。 Ruby从Smalltalk继承了这个特性的名称,它被称为inject:into:
(像aCollection inject: aStartValue into: aBlock.
一样使用)因此,在Ruby中,它被称为inject
。它也是reduce
的别名,这有点不幸,因为这通常意味着略有不同。
您的C#示例在Ruby中看起来像这样:
factorial = [1, 2, 3, 4, 5].reduce(:*)
虽然其中一个可能更惯用:
factorial = (1..5).reduce(:*)
factorial = 1.upto(5).reduce(:*)
答案 1 :(得分:2)