Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/linq/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 使用LINQ,如何将集合聚合到指定类型?_C#_Linq - Fatal编程技术网

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谢谢,我刚刚更新了你评论的链接!