0 votes

En utilisant Linq et C#, comment catégoriser une liste de listes et obtenir des catégories vides ?

Avoir ce qui suit:

var categories = new List {10,20,30,40};    // Notez le 40 ici...
var bundleA = new List {10,20};
var bundleB = new List {20,20,30}; 
var lots = new List> {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();

Le dump montre:

  • Longueur = 10 avec Dist = 0.2
  • Longueur = 20 avec Dist = 0.6
  • Longueur = 30 avec Dist = 0.2

J'essaie d'avoir Longueur = 40 avec Dist = 0 dans le résultat mais je n'arrive pas à le comprendre.

Une aide s'il vous plaît?

1voto

Stephan Points 4119

Cela devrait le faire :

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

Le problème était que vous devez commencer par les catégories ou toute catégorie qui n'existe pas dans les lots n'existera pas dans le résultat.

1voto

driis Points 70872

Que diriez-vous de :

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

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X