Ich möchte Schlüssel und Werte des Wörterbuchs umkehren. Ie. Aus Quellverzeichnis Dictionary<int, string>
, möchte ich Dictionary<string, List<int>>
bekommen. Es gibt List<int>
, da der Wert mehrmals im Quellenwörterbuch unter verschiedenen Schlüsseln sein kann.Rückschlüssel und Wert im Wörterbuch
Beispiel:
{
1: "A"
2: "A"
3: "A"
4: "B"
5: "B"
6: "C"
7: "D"
}
würde Transformation:
{
"A": [1,2,3]
"B": [4,5]
"C": [6]
"D": [7]
}
Vielen Dank für Hilfe.
EDIT:
OK, mit Hilfe von euch konnte ich ein wenig über diesen Algorithmus verstehen. Jetzt sehe ich zwei mögliche Lösungen (unter anderem) und weiß nicht, was der wirkliche Unterschied zwischen ihnen ist, da das Ergebnis scheint das gleiche zu sein.
Gibt es Leistungsprobleme?
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:
ich landete mit nur
var byLookup = actions.ToLookup(pair => pair.Value, pair => pair.Key)
ich es nicht so einfach wäre zu erwarten hat. Danke allen.
Sind Sie versuchen, eine erstellen Nachschlagen aus einem Wörterbuch? Wenn dies der Fall ist, ist die Erweiterungsmethode ToLookup() Ihr Freund. – Baldrick
@B ... Ich habe versucht, es herauszufinden, aber konnte nicht den Kopf über die GroupBy-Methode mit allen Parametern und Überladungen bekommen. – sidon
Nur 'var byLookup = actions.ToLookup (pair => pair.Value, pair => pair.Key)' ist genug, Sie brauchen nicht wirklich den Aufruf ToDictionary auf diesem. –