Linq Aggregate для анонимного типа - C#

Узнай цену своей работы

Формулировка задачи:

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

Решение задачи: «Linq Aggregate для анонимного типа»

textual
Листинг программы
  1.             var arr = Enumerable.Range(1, 10);
  2.             string s = "0101010101";
  3.             var result = arr.Zip(s, (i, c) => new { i = i, c = c })
  4.                 .Aggregate(new { sum = 0, prod = 1 },
  5.                 (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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут