C# 使用LINQ,如何将集合聚合到指定类型?
C# 使用LINQ,如何将集合聚合到指定类型?,c#,linq,C#,Linq,Aggregate允许您提供一个自定义函数来运行IEnumerable并返回T。 Sum允许您使用自定义函数从每个元素中提取一个int,然后将它们全部相加 但是,如果我想做这样的事情,比如: struct S { public int i; public int j; } int Aggregate(IEnumerable<S> data) { int ret = 0; foreach(x in data) { ret ^ = Math.Max(x.i,x.j);
Aggregate
允许您提供一个自定义函数来运行IEnumerable
并返回T
。
Sum
允许您使用自定义函数从每个元素中提取一个int
,然后将它们全部相加
但是,如果我想做这样的事情,比如:
struct S
{
public int i;
public int j;
}
int Aggregate(IEnumerable<S> data)
{
int ret = 0;
foreach(x in data)
{
ret ^ = Math.Max(x.i,x.j);
}
return ret;
}
var aggregate = data.Aggregate(0, (acc, cur) => acc ^ Math.Max(cur.i, cur.j));
结构
{
公共国际一级;
公共int j;
}
整数聚合(IEnumerable数据)
{
int-ret=0;
foreach(数据中的x)
{
ret^=数学最大值(x.i,x.j);
}
返回ret;
}
如中所示,我希望使用指定的函数聚合到指定的类型。
LINQ是否提供此功能,或者必须组合多个LINQ操作?您可以使用LINQ的
聚合函数之一来执行此操作:
聚合(IEnumerable、tacumulate、Func)
例如:
struct S
{
public int i;
public int j;
}
int Aggregate(IEnumerable<S> data)
{
int ret = 0;
foreach(x in data)
{
ret ^ = Math.Max(x.i,x.j);
}
return ret;
}
var aggregate = data.Aggregate(0, (acc, cur) => acc ^ Math.Max(cur.i, cur.j));
如以下文件所述:
在序列上应用累加器函数。指定的种子
值用作初始累加器值
data.Aggregate(0,(total,next)=>total^Math.Max(next.i,next.j))
你有Aggregate
Aha,我错过了重载。谢谢大家。正如塞尔文在评论中指出的,你可能想明确提到这是哪种过载,因为阅读它们和理解lamdas会变得相当混乱。否则这是一个很好的答案,thanks@Mr.Boy谢谢,我刚刚更新了你评论的链接!