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});

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

15   голосов , оценка 4.133 из 5