Используя LINQ, как объединить коллекцию в указанный тип? - PullRequest
2 голосов
/ 23 апреля 2020

Aggregate позволяет вам предоставить пользовательскую функцию для запуска поверх IEnumerable<T> и возврата 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;
}

Как я хочу, чтобы агрегировать в указанный тип, используя указанную функцию. Обеспечивает ли это LINQ или нужно объединить несколько операций LINQ?

1 Ответ

3 голосов
/ 23 апреля 2020

Для этого можно использовать одну из функций Aggregate LINQ:

Aggregate<TSource,TAccumulate>(IEnumerable<TSource>, TAccumulate, Func<TAccumulate,TSource,TAccumulate>)

Например:

var aggregate = data.Aggregate(0, (acc, cur) => acc ^ Math.Max(cur.i, cur.j));

Как описано в docs :

Применяет функцию накопителя к последовательности. Указанное начальное значение используется в качестве начального значения аккумулятора.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...