2011-02-18 68 views
5

什麼是Linq Aggregate方法的紅寶石等價物。它的工作原理是這樣的C#Linq的紅寶石等價聚合方法

var factorial = new[] { 1, 2, 3, 4, 5 }.Aggregate((acc, i) => acc * i); 

變量ACC是越來越每累計從數組序列值傳遞給拉姆達時間..

+1

這就是所謂的'reduce` - 請參閱http:// en.wikipedia.org/wiki/Fold_%28higher-order_function%29對於各種語言的等效語言。 – Gabe 2011-02-18 01:46:43

+1

您應該將此評論作爲答案,以便Ramesh可以將其標記爲已接受的答案。 – chuckj 2011-02-18 01:53:39

回答

14

這通常被稱爲數學以及幾乎任何編程語言。這是變質作用的更一般概念的一個實例。 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(:*) 
2

Enumerable#inject

用法:

a = [1,2,3,4,5] 
factorial = a.inject(1) do |product, i| 
    product * i 
end 
+1

正如@加比指出的那樣,它也有別名`reduce`,這就是數學術語。 – 2011-02-18 01:47:46