none
Linq, расчет среднего среди ненулевых значений RRS feed

  • Вопрос

  • Всем привет!
    Как найти среднее среди ненулевых значений -
    using System.Linq;
    ...
    public class group
    { public group (string s,double d){ S=s; D=d; }
       public string S;
       public double D;
    }
    public class work
    { public List<int,group> GroupLst=new List<int,group>();
       GroupLst.Add(1,new group("A",1));
       GroupLst.Add(2,new group("B",0));
       GroupLst.Add(3,new group("C",3));
       double Ave=(double)GroupLst.Average(n=>n.Value.D);
    }// ??? Что нужно написать в предыдущей строке, чтобы исключить из расчета нулевое значение ???


    • Изменено QazRdx 13 августа 2012 г. 22:44
    13 августа 2012 г. 22:43

Ответы

  • "Что нужно написать в предыдущей строке, чтобы исключить из расчета нулевое значение ???" - примерно так.

    double Ave = (double)GroupLst.Where(n=> n.Value.D!=0).Average(n => n.Value.D);

    А типа List<,> нет, есть Dictionary<,>, если конечно это не Ваш.

    • Предложено в качестве ответа Алексей ЛосевEditor 14 августа 2012 г. 7:17
    • Помечено в качестве ответа QazRdx 15 августа 2012 г. 19:52
    14 августа 2012 г. 4:39
    Модератор
  • Для таких целей спользуется метод Where в котором указывается ограничение которое

     double Ave=(double)GroupLst.Where(p=>p.Value.D!=0).Average(n=>n.Value.D);

    • Помечено в качестве ответа QazRdx 15 августа 2012 г. 19:52
    14 августа 2012 г. 5:29

Все ответы

  • Помнится там можно было где-то указать условие.

    Может что-то вроде такого надо:
    double Ave=(double)GroupLst.Select(x=> x.Value.D != 0).Average(n=>n.Value.D);
    или
    запросом написать через from.. in .. where .. select ну и тд

    Правда я не понял как это в листе 2 типа (int, group).
    Напоминает словарик или типа того.

    • Изменено INFEL8 14 августа 2012 г. 4:31
    14 августа 2012 г. 4:29
  • "Что нужно написать в предыдущей строке, чтобы исключить из расчета нулевое значение ???" - примерно так.

    double Ave = (double)GroupLst.Where(n=> n.Value.D!=0).Average(n => n.Value.D);

    А типа List<,> нет, есть Dictionary<,>, если конечно это не Ваш.

    • Предложено в качестве ответа Алексей ЛосевEditor 14 августа 2012 г. 7:17
    • Помечено в качестве ответа QazRdx 15 августа 2012 г. 19:52
    14 августа 2012 г. 4:39
    Модератор
  • Для таких целей спользуется метод Where в котором указывается ограничение которое

     double Ave=(double)GroupLst.Where(p=>p.Value.D!=0).Average(n=>n.Value.D);

    • Помечено в качестве ответа QazRdx 15 августа 2012 г. 19:52
    14 августа 2012 г. 5:29
  • Всем спасибо!

    Yatajga - "А типа List<,> нет, есть Dictionary<,>..."
    Извиняюсь! Речь идет о SortedList<,>, ну и, конечно, о Dictionary<,>.
    14 августа 2012 г. 18:59