.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) => 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转换成一个字符串,使用条件来修剪起始的“,”。

http://stackoverflow.com/questions/1507501/linq-aggregate-complex-types-into-a-string

本站文章除注明转载外,均为本站原创或编译
转载请明显位置注明出处:.net – Linq将复杂类型聚合成字符串