2017-05-24 4 views
-1

erhalten Ich habe ein Wörterbuch Typ <int, list<int>>. Ich versuche, die Anzahl der für diesen bestimmten Schlüssel wiederholten Werte zu zählen.Anzahl der Werte im Wörterbuch mit LINQ

Ich versuchte

LINQquery = dict.SelectMany(keyvalues => keyvalues.Value.GroupBy(values => values).Select(values => new {key = keyvalues.Key, value = values.Key, count = values.Count(),votescasted = keyvalues.Value.Count})); 
resultList = LINQquery.ToList(); 

Durch diese LINQ ich für jeden eindeutigen Wert in meinem Wörterbuch einen neuen Listeneintrag erschaffe. Ich schließe mich mit mehreren Schlüsseleinträgen in meiner Liste an. Wie kann ich meine Abfrage so ändern, dass ich eine Ergebnisliste mit dem Schlüssel countvalue1, countofvalue2 .., countofvalueN habe?

mein Eingang ist dict {500, {25,26,25,25}} mit meinem LINQ Ich erhalte eine Liste key = 500, Wert = 25, count = 3 key = 500, Wert = 26 , count = 1

Wie kann ich meine Abfrage so ändern, dass meine Ausgabeliste Schlüssel = 500, Countof25 = 3, Countof26 = 1 sein kann.

+1

Bitte geben Sie einen [MCVE] zeigt Probe Eingabe und erwartete Ausgabe. Es wird Ihnen viel einfacher sein, Ihnen zu helfen als eine * Beschreibung * von dem, was Sie tun. –

+0

Sorry für den Tippfehler .. Dictionary Typ ist Int, Liste {Int} – derekspoll

+0

Eingabewörterbuch {500, {25,26,25,25} Ausgabeliste Schlüssel = 500, Countof25 = 3, Countof26 = 1 – derekspoll

Antwort

0

ich glaube, das tun, was Sie wollen:

var x = dict 
    .Select(d => new { Key = d.Key, 
         Counts = d.Value.GroupBy(v => v) 
             .Select(g => 
              new { Value = g.Key, 
                Count = g.Count() })}); 

dann können wir hinzufügen:

x.Select(i => $"Key = {i.Key}, " + 
    String.Join(", ", i.Counts.Select(c => $"countof{c.Value}={c.Count}"))).Dump(); 

und wir erhalten:

Key = 500, countof25=3, countof26=1 
+0

danke @jamescurran – derekspoll

Verwandte Themen