Используя Linq и C #, как бы я классифицировал список и получил пустые категории? - PullRequest
0 голосов
/ 07 мая 2010

Имея следующее:

var categories = new List<double> {10,20,30,40};    // Note the 40 here...
var bundleA = new List<double> {10,20};
var bundleB = new List<double> {20,20,30}; 
var lots = new List<List<double>> {bundleA, bundleB};
var total = lots.Sum (l => l.Count);

var res = from lot in lots
            from bundle in lot
            join length in categories on bundle equals length into l
            group bundle by l
            into g
            select new {Length = g.Key.Single(), Dist = (double)g.Count() / total};
res.Dump();

Дамп показывает:

  • Длина = 10 с Расст = 0,2
  • Длина = 20 с Расст = 0,6
  • Длина = 30 с Расст = 0,2

Я пытаюсь получить в результате Length = 40 с Dist = 0, но не могу понять.

Любая помощь, пожалуйста?

Ответы [ 2 ]

1 голос
/ 07 мая 2010

Как насчет:

        var res = from cat in categories
                  let bundle = lots.SelectMany(list => list)
                  let cnt = bundle.Count(n => n == cat)
                  select new { Length = cat, Dist = (double)cnt / total };
1 голос
/ 07 мая 2010

Это должно быть получено:

var res =   from length in categories
            let sm = lots.SelectMany(l => l)
            select new { length, dist = sm.Where(l => l == length).Count() / (double)sm.Count() };

Проблема заключалась в том, что вам нужно начинать с категорий, или в результате не будет существовать любая категория, которой нет в пакетах.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...