Rückseite einer Karte in <Wert -, Schlüssel - > format in Golang
Habe ich eine Karte für mein Programm sieht wie folgt aus:
fruit_map := map[string]string {
"apple": "likey",
"orange": "no likey",
}
Möchte ich umkehren so dass es liest die folgenden:
{
"likey": "apple",
"no likey": "orange",
}
Gibt es keine doppelten Werte. Auch meine Karte ist klein - etwa 200 Schlüssel. Ich fand keine integrierte Methode zum umkehren einer Karte wie dieser. Gibt es eine Möglichkeit, dies zu tun fallen? Ich bin nicht viel Mühe gemacht über Raum Komplexität, aber die Lösung muss schnell sein.
Dank.
Du musst angemeldet sein, um einen Kommentar abzugeben.
Schreiben Sie eine
for
- Schleife zur Iteration über die Schlüssel-Wert-paar der original-Karte, und setzen Sie Sie in eine neue map (siehe FunktionreverseMap
)Code@http://play.golang.org/p/mCFmRT8nzP
Ausgabe:
BTW, es ist nicht idiomatisch, um Namen gehen Variablen wie
fruit_map
Sie wirklich verwenden sollten, Kamel-Fall, wiefruitMap
.m
identisch ist, die Größe der Kartem
(vorausgesetzt, dass keine doppelten Werte), die Sie vielleicht nutzen wollen:n := make(map[string]string, len(m))
zu speichern, ausreichend Platz und vermeiden Umschichtungen während der Schleife.Den anderen Antworten bieten die einfache Lösung basiert auf Umgang mit der Karte direkt.
Ist eine alternative Lösung zu Kapseln eine bidirektionale map als ein eigenständiges Dienstprogramm, das hat den Vorteil, dass Sie schreiben konnte, Gründliche unit-tests für Sie und dann in der Lage sein auf Sie verlassen, um richtig funktionieren über ein einfaches API.
Hier mein Beispiel implementation (das ist unvollständig, und die haben noch nicht die notwendigen unit-tests):
Paket main
Du hast Recht, es gibt nichts, built-in, um dies zu erreichen, aber es ist wirklich einfach:
Diese Ausgänge die folgende:
Check it out auf der Spielplatz. Wenn dies üblich ist, können Sie immer zu extrahieren in eine eigene Funktion.
Gibt es nicht eine integrierte Funktion zu tun, aber es ist einfach genug, mit ein
for
Schleife.finden Sie unter: http://play.golang.org/p/BQjqUsf9aU