Linq Aggregate для анонимного типа - C#
Формулировка задачи:
Добрый день.
Допустим, у меня имеется массив от 1 до 10 и строка, содержащая 0 и 1, равная длине этого массива. Задачей стоит сопоставить строку и массив: в случае, если у нас в строке ноль, то соответствующий элемент массива должен суммироваться, а если 1 - то умножаться. Например [1,2,3,4,5] и "01001" даст 1 + 3 + 4 и 2 * 5.
Я решил сделать анонимный тип в запросе таким образом:
Как сформировать запрос таким образом, чтобы я получил сумму и произведение выбранных элементов?
var arr = Enumerable.Range(1,10); string s = "0101010101"; var res = s.Select((x,i) => new { sum = s[i] == '0' ? x : 0, prod = s[i] == '1' ? x : 1 });
опечатка
var arr = Enumerable.Range(1,10); string s = "0101010101"; var res = arr.Select((x,i) => new { sum = s[i] == '0' ? x : 0, prod = s[i] == '1' ? x : 1 });
Решение задачи: «Linq Aggregate для анонимного типа»
textual
Листинг программы
var arr = Enumerable.Range(1, 10); string s = "0101010101"; var result = arr.Zip(s, (i, c) => new { i = i, c = c }) .Aggregate(new { sum = 0, prod = 1 }, (acc, ic) => new {sum = ic.c == '0' ? acc.sum + ic.i:acc.sum, prod= ic.c=='1'? acc.prod*ic.i:acc.prod});
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д