2016-07-29 8 views
-4

Ich schrieb einige Code-Daten in diesem Wörterbuch hinzufügen:Sortieren Schlüssel und Werte im Wörterbuch LINQ mit

Dictionary<string, Dictionary<string, double>> studentsExamsMarks = 
     new Dictionary<string, Dictionary<string, double>>(); 
     studentsExamsMarks.Add("Peter", new Dictionary<string, double>()); 
     studentsExamsMarks["Peter"].Add("History", 5.15); 
     studentsExamsMarks["Peter"].Add("Biology", 4.20); 
     studentsExamsMarks["Peter"].Add("Physics", 4.65); 
     studentsExamsMarks.Add("John", new Dictionary<string, double>()); 
     studentsExamsMarks["John"].Add("History", 6.00); 
     studentsExamsMarks["John"].Add("Biology", 3.75); 
     studentsExamsMarks["John"].Add("Physics", 4.15); 
     studentsExamsMarks.Add("Michael", new Dictionary<string, double>()); 
     studentsExamsMarks["Michael"].Add("History", 3.00); 
     studentsExamsMarks["Michael"].Add("Biology", 3.95); 
     studentsExamsMarks["Michael"].Add("Physics", 4.95); 

Wie sollte ich zu sortieren und zu drucken zuerst mit dem Namen des Schülers (aufsteigende Reihenfolge) und als durch die Wert der Doppel im inneren Wörterbuch oder durch den Namen des Subjekts? Ich werde sehr dankbar sein, wenn Sie mir beide Versionen zeigen. Vielen Dank!

+3

Bitte lesen Sie [fragen] und Ihre Forschung teilen. Gruppierung und Sortierung sind auf MSDN, im Web und auf dieser Website sehr ausführlich dokumentiert. – CodeCaster

Antwort

1

Sie können verwenden, um alle inneren Wörterbucheinträge zu erhalten, um einen anonymen Typ mit allen Eigenschaften zu erstellen. Dann ist die Bestellung einfach mit OrderBy und ThenBy:

var ordered = studentsExamsMarks 
    .SelectMany(kv => kv.Value 
     .Select(kvInner => new {Name = kv.Key, Subject = kvInner.Key, Value = kvInner.Value})) 
    .OrderBy(x => x.Name) 
    .ThenBy(x => x.Value); // use x.Subject if you want to order by that instead 

foreach (var x in ordered) 
    Console.WriteLine($"{x.Name} {x.Subject} {x.Value}"); 
Verwandte Themen