2009-12-28 9 views
5

Ich habe einen Lambda-Ausdruck, der Ergebnisse von einem Wörterbuch erhält.C# Linq Ergebnis ToDictionary Hilfe

Der Ausdruck zieht die Paare zurück, die ich brauche, ich kann sie im Debug-Modus der IDE sehen.

Wie konvertiere ich das ein Wörterbuch des gleichen Typs wie die Quelle zurück? Ich weiß, dass das TElement von sortedDict ein KeyValuePair ist, aber ich habe Probleme, die Syntax der ToDictionary-Erweiterungsmethode vollständig zu verstehen. Ich habe auch versucht, das var-Ergebnis zu erreichen, um stückweise ein neues Wörterbuch zu konstruieren, aber ohne Erfolg.

Gibt es so etwas wie diese (Funktionalität weise):

var results = (from entry in dictionary 
       orderby entry.Value descending 
       select entry); 
Dictionary<string,float> newDictionary = results as (Dictionary<string,float>); 
+0

Lambda-Syntax hat die Form 't => Func '. Siehe mquanders Antwort - 'r => r.Key' und' r => r.Wert' sind lambdas. Verwechseln Sie diese nicht mit Abfrageausdrücken ('from x in y select x'). – Aaronaught

Antwort

15

Sie können es wie folgt tun:

var newDictionary = results.ToDictionary(r => r.Key, r => r.Value); 

lesen, dass in den Ergebnissen für jedes Paar als“, um das dieses Element hinzufügen neues Wörterbuch, in dem der Schlüssel als Schlüssel des Paares erzeugt wird und der Wert als Wert des Paares erzeugt wird. "

Auch, nur basierend auf Ihrem Beispielcode - Sie sollten bedenken, dass eine Dictionary<T, U> als Hash-Tabelle implementiert ist, so wird es nicht die Reihenfolge der Elemente beibehalten, die Sie hineinlegen. Verwenden Sie stattdessen eine SortedDictionary oder eine SortedList, wenn Sie eine geordnete Karte benötigen.

+0

Vielen Dank! Löste meine Leiden! – Simpleton

+0

Lol, ich liebe, wie kompliziert einige meiner Code bekommt, und dann 5 Sekunden auf SO und es ist 1/10 der Größe .... so einfach –

+0

Schlüssel ist nicht auflisten nach Eingabe von r. – Kenta