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.
InformationsquelleAutor sidon | 2013-10-22
Schreibe einen Kommentar