.net – Linq将复杂类型聚合成字符串

前端之家收集整理的这篇文章主要介绍了.net – Linq将复杂类型聚合成字符串前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。
我看到了.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转换成一个字符串,使用条件来修剪起始的“,”。

猜你在找的设计模式相关文章