我看到了.net聚合函数的简单例子如下:
string[] words = { "one","two","three" }; var res = words.Aggregate((current,next) => current + "," + next); Console.WriteLine(res);
如果您想聚合更复杂的类型,那么如何使用“聚合”功能?
例如:一个具有2个属性的类,例如’key’和’value’,你希望输出如下所示:
"MyAge: 33,MyHeight: 1.75,MyWeight:90"
你有两个选择:
>项目到一个字符串然后聚合:
var values = new[] { new { Key = "MyAge",Value = 33.0 },new { Key = "MyHeight",Value = 1.75 },new { Key = "MyWeight",Value = 90.0 } }; var res1 = values.Select(x => string.Format("{0}:{1}",x.Key,x.Value)) .Aggregate((current," + next); Console.WriteLine(res1);
这具有使用第一个字符串元素作为种子(没有前缀“,”)的优点,但是将消耗更多的内存用于在进程中创建的字符串。
>使用接受种子的聚合重载,也许是一个StringBuilder:
var res2 = values.Aggregate(new StringBuilder(),(current,next) => current.AppendFormat(",{0}:{1}",next.Key,next.Value),sb => sb.Length > 2 ? sb.Remove(0,2).ToString() : ""); Console.WriteLine(res2);
第二个代理将我们的StringBuilder转换成一个字符串,使用条件来修剪起始的“,”。