4.2 聚合操作符(Aggregation Operators)
有幾個(gè)標(biāo)準(zhǔn)查詢(xún)操作符(standard query operators)定義用來(lái)聚合(aggregating)一組值的序列(a sequence of values)成一個(gè)單獨(dú)的值(a single value)。最普通的聚合操作符(most general aggregation operator)就是 Fold,它的定義看起來(lái)如下所示:
public static U Fold<T, U>(this IEnumerable<T> source,

U seed, Func<U, T, U> func)
{
U result = seed;

foreach (T element in source)
result = func(result, element);

return result;
}

Fold 操作符使它對(duì)一組值的序列(a sequence of values)簡(jiǎn)單地執(zhí)行一個(gè)計(jì)算(perform a calculation)處理。Fold 工作的方式是對(duì)基本的序列(the underlying sequence)的每一個(gè)成員調(diào)用一次 lambda 表達(dá)式。每一次 Fold 調(diào)用 lambda 表達(dá)式的時(shí)候,它既從序列(sequence)傳遞(passes)成員(members)又傳遞一個(gè)聚合的值(aggregated value)(該初始化的值(initial value)對(duì) Fold 是基于種子參數(shù)(seed parameter))。Lambda 表達(dá)式的結(jié)果替換了以前的聚合的值(the previous aggregated value),Fold 返回了 lambda 表達(dá)式的最終結(jié)果(the final result)。
例于,下面的程序使用 Fold 累計(jì)(accumulate)計(jì)算一個(gè)字符串?dāng)?shù)組的所有字符數(shù)目(total character count):

string[] names =
{ "Albert", "Burke", "Connor", "David",
"Everett", "Frank", "George", "Harris"};

int count = names.Fold(0, (c, s) => c + s.Length);
// count == 46

除了(In addition to)這個(gè)有多種用途(general purpose)的 Fold 操作符之外,標(biāo)準(zhǔn)查詢(xún)操作符(standard query operators)還包含一個(gè)多用途的 Count 操作符,和四個(gè)數(shù)字聚合(numeric aggregation)操作符(Min, Max, Sum, 和 Average),以簡(jiǎn)單化(simplify)這些普通的聚合操作(common aggregation operations)。數(shù)字聚合操作符檢查(work over)數(shù)字類(lèi)型(numeric types)(如 int, double, decimal)的序列,或者在一個(gè)方法(function)提供的時(shí)候檢查任意值(arbitrary values)的序列(sequences),以映射(projects)序列的成員(members of the sequence)為一個(gè)數(shù)字類(lèi)型(a numeric type)。
下面的程序闡明(illustrates)了剛才描述的 Sum 操作符的兩個(gè)方面(both forms of):
int[] numbers = { 1, 2, 3, 4, 5, 6, 7, 8, 9, 10 };
string[] names = { "Albert", "Burke", "Connor", "David",
"Everett", "Frank", "George", "Harris"};
int total1 = numbers.Sum(); // total1 == 55
int total2 = names.Sum(s => s.Length); // total2 == 46
注意第二個(gè)使用 Sum 的語(yǔ)句與前面使用 Fold 的程序是相等的(equivalent to)。
待續(xù), 錯(cuò)誤難免,請(qǐng)批評(píng)指正,譯者Naven 2005-10-24