做什么& b代表.Aggregate((a,b)=>声明w / a& b)

时间:2013-03-13 18:53:46

标签: c# linq

我正在努力想出最好的方法来解释我的确切问题,而不必有人必须解释Aggregate的作用,因为我知道这里已经深入探讨了这里和互联网上的其他地方。调用Aggregate()并使用linq语句(如

)时
(a,b) => a+b

什么是b,什么是b?我知道a是当前的元素,但是b是什么?我已经看到了一些示例,其中b似乎只是一个元素,而在其他示例中,它似乎是前一个函数和其他示例的结果,其中b似乎是前一个函数的结果。

我在这里查看了实际C#文档页面上的示例 http://msdn.microsoft.com/en-us/library/bb548744.aspx 和这里 http://www.dotnetperls.com/aggregate

但我只需要澄清linq表达式中两个参数之间的区别。如果我错过了一些基本的Linq知识来回答这个问题,请随意把我放在我的位置。

3 个答案:

答案 0 :(得分:5)

查看http://msdn.microsoft.com/en-us/library/bb548651.aspx

上的示例
        string sentence = "the quick brown fox jumps over the lazy dog";

        // Split the string into individual words. 
        string[] words = sentence.Split(' ');

        // Prepend each word to the beginning of the  
        // new sentence to reverse the word order. 
        string reversed = words.Aggregate((workingSentence, next) =>
                                              next + " " + workingSentence);

        Console.WriteLine(reversed);

        // This code produces the following output: 
        // 
        // dog lazy the over jumps fox brown quick the 

在此示例中,传递给Aggregate的匿名函数为(workingSentence, next) => next + " " + workingSentenceaworkingSentence包含直到当前元素的聚合结果,b将是添加到聚合的当前元素。在第一次调用匿名函数workingSentence = ""next = "the"时。在下一个电话中,workingSentence = "the"next = "quick"

答案 1 :(得分:4)

如果你正在调用匹配该描述的Func的重载,那么你最有可能使用这个版本:

Enumerable.Aggregate

这意味着a将成为您的累加器,而b将是下一个可以使用的元素。

someEnumerable.Aggregate((a,b) => a & b);

如果你要将它扩展到常规循环,它可能看起来像:

Sometype a = null;

foreach(var b in someEnumerable)
{
    if(a == null)
    {
        a = b;
    }
    else
    {
        a = a & b;
    }
}

将执行按位 - 并将结果存储回累加器。

答案 2 :(得分:3)

a不是当前元素 - b是。第一次调用lambda表达式时,a将等于您为seed提供的Aggregate参数。每个后续时间它将等于上一次调用lambda表达式的结果。