Варианты реализации суммирования, усреднения, объединения и т. Д. Элементов в IEnumerable

StackOverflow https://stackoverflow.com/questions/472488

Вопрос

Я ищу кратчайший код для создания методов для выполнения общих операций над элементами в IEnumerable.

Например:

public interface IPupil
{
    string Name { get; set; }
    int Age { get; set; }
}
<Ол>
  • Суммирование имущества - например, IPupil.Age в IEnumerable & Lt; IPupil & Gt;
  • Усреднение свойства - например, IPupil.Age в IEnumerable & Lt; IPupil & Gt;
  • Создание строки CSV - например, IPupil.Name в IEnumerable & Lt; IPupil & Gt;
  • Меня интересуют различные подходы к решению этих примеров: foreach (длинная рука), делегаты, LINQ, анонимные методы и т. д.

    Извините за плохую формулировку, у меня возникают проблемы с описанием именно того, что я хочу!

    Это было полезно?

    Решение

    Суммирование и усреднение: легко с LINQ:

    var sum = pupils.Sum(pupil => pupil.Age);
    var average = pupils.Average(pupil => pupil.Age);
    

    Построение строки CSV - здесь есть различные варианты, включая написание собственных методов расширения. Это будет работать, хотя:

    var csv = string.Join(",", pupils.Select(pupil => pupil.Name).ToArray());
    

    Обратите внимание, что сложно вычислить несколько вещей (например, среднюю и сумму) за один проход по данным с помощью обычного LINQ. Если вы заинтересованы в этом, посмотрите на Проект Push LINQ , который мы с Марком Гравеллом написали. Это довольно специализированное требование.

    Лицензировано под: CC-BY-SA с атрибуция
    Не связан с StackOverflow
    scroll top