Линк Агрегатная функция - PullRequest
1 голос
/ 02 мая 2010

У меня есть список как

«тест», «бла», «что-то», «еще»

Но когда я использую Aggrate на нем и тем временем вызываю функцию, мне кажется, что после 2 'итераций' результат первых передается?

Я использую это как:

myList.Aggregate((current, next) => someMethod(current) + ", "+ someMethod(next));

и хотя я помещаю точку останова в функцию someMethod, где происходит некоторое преобразование информации в myList, я замечаю, что после 3-го вызова я получаю результат от предыдущего преобразования в качестве входного параметра.

Ответы [ 2 ]

1 голос
/ 04 мая 2010

Это способ, которым он предназначен для работы.

То, что вы назвали током, означает, что это все, что накоплено до сих пор. При первом вызове семя является первым элементом.

Вы можете сделать что-то вроде:

var res = myList
   .Aggregate(String.Empty, (accumulated, next) => accumulated+ ", "+ someMethod(next))
   .Substring(2);//take out the first ", "

Таким образом, вы применяете someMethod только один раз для каждого элемента.

0 голосов
/ 02 января 2012

Если бы мой список представлял собой список строк, и я хотел возвращать / манипулировать только определенными элементами, я обычно делал бы что-то вроде этого:

     var NewCollection = MyStringCollection
                             //filter with where clause
                             .Where(StringItem => StringItem == "xyz"
                             //select/manipulate with aggregate
                             .Aggregate(default(string.empty), (av, e) =>
                             {
                                 //do stuff
                                 return av ?? e;
                             });
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...