Reverse-Taste und Wert in dictionary
Ich würde gerne reverse keys und Werte des dictionary. I. e von Quelle Wörterbuch Dictionary<int, string>
würde ich gerne Dictionary<string, List<int>>
. Es ist List<int>
denn der Wert kann im source-Wörterbuch-mehrfach unter verschiedenen Schlüsseln.
Beispiel:
{
1: "A"
2: "A"
3: "A"
4: "B"
5: "B"
6: "C"
7: "D"
}
transformieren zu:
{
"A": [1,2,3]
"B": [4,5]
"C": [6]
"D": [7]
}
Danke für die Hilfe.
EDIT:
OK, das mit Hilfe von Euch ich war in der Lage zu verstehen, ein wenig über dieses Algorithmus.
Ich sehe jetzt zwei mögliche Lösungen (unter anderem) und weiß nicht, was ist der wirkliche Unterschied zwischen Ihnen, wie das Ergebnis scheint das gleiche zu sein.
Gibt es irgendwelche performance-Probleme?
var byLookup = actions.ToLookup(pair => pair.Value, pair => pair.Key)
.ToDictionary(group => group.Key, group => group.AsEnumerable());
var byGroupBy = actions.GroupBy(pair => pair.Value, pair => pair.Key)
.ToDictionary(group => group.Key, group => group.AsEnumerable());
EDIT 2:
Landete ich mit nur
var byLookup = actions.ToLookup(pair => pair.Value, pair => pair.Key)
Habe ich nicht erwartet, es würde so einfach sein.
Vielen Dank an alle.
- Sind Sie versuchen, erstellen Sie eine lookup aus einem Wörterbuch? Wenn dies der Fall ist, die ToLookup () - Erweiterungsmethode ist dein Freund.
- Ich habe versucht, es herauszufinden, aber konnte nicht meinen Kopf über die GroupBy-Methode mit allen Parametern und überlastungen.
- Nur
var byLookup = actions.ToLookup(pair => pair.Value, pair => pair.Key)
ist genug, Sie nicht wirklich brauchen, den Aufruf von ToDictionary auf, dass man.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist eine ziemlich einfache LINQ-Ausdruck:
Erste, du der Gruppe durch den Wert. Diese Gruppen erstellt, mit strings als Schlüssel, und
KeyValuePair<int,string>
als seine Elemente.Dann konvertieren Sie die Gruppen zu einem Wörterbuch durch die Verwendung von Gruppen ist Schlüssel für die Wörterbuch-Taste und "Abflachung" der Tasten der original-Wörterbuch in eine Liste mit
ToList()
.AsEnumerable()
es, obwohl, es sei denn, Sie wissen sicher, dass Sie sind nicht zu zählen die Listen, die in das Wörterbuch mehr als einmal.ToDictionary
insgesamt.Können Sie auch Ihre gewünschte Ergebnis wie folgt:
Diese gibt das gleiche Ergebnis wie dasblinkenlight, sondern bewegt sich auch die Abbildung der KeyValuePair in der group by-Klausel