Holen Sie sich den index des Elements aus dem array / slice-oder Schlüssel-Wert aus der Karte Gehen?

Habe ich eine Aufzählung von strings (die ja konstant sind, z.B. eine Liste der Länder), dass ich gerne in der Lage sein, um die Zeichenfolge, wenn die Bereitstellung der aufgezählten int-Wert, und Umgekehrt in der Lage sein, um die aufgezählten int-Wert, wenn die Bereitstellung der Zeichenfolge. Dies ist, um zu übersetzen, die zwischen den beiden für Datenbank-Transaktionen.

var MyData = [...]string {
  "string1", //index 0
  "string2", //index 1
  "string3", //index 2  
}

Einfach für eine Sprache wie python, in denen man einfach etwas tun, wie MyData[1], um "string2" und MyData.index("string2") zu bekommen 1.

Ein paar mögliche Lösungen wäre

  • Schreibe meine eigene Funktion, um den index durch Iteration über das array /slice
  • Sortieren Sie das array, slice und verwenden Sie die Suche-Funktion return index, (obwohl dies nicht für eine unsortierte Sequenz, die ist, was ich bevorzugen würde)
  • erhalten eine Karte und eine Reihe, die sich gegenseitig spiegeln, die anfällig für Fehler.

Apropos Karten, kann man den Zugriff auf die Schlüssel von einem bestimmten Wert? Dann könnte ich einfach eine Karte wie die folgende, und in der Lage sein, um die string-Taste, wenn die Bereitstellung der int-Wert.

var MyData = map[string]int {
  "string1": 0,
  "string2": 1,
  "string3": 2,
}

UPDATE:, Bevor ich Sie akzeptieren meine Antwort, ich will, um das problem zu erklären genauer, was ich wissen muss ziemlich Häufig. Ich haben im Grunde ein Satz Saiten, die sind konstant (wie eine Liste von Ländern) mit jeweils einer zugeordneten integer-Wert. In meiner Datenbank habe ich einfach store-die ganze Zahl, um Platz zu sparen, da es Millionen von Einträgen. Aber wenn ich einen Eintrag aus der Datenbank, die ich brauche, um die Anzeige der Zeichenfolge, um es lesbarer zu einem Benutzer. Ein einfaches array für, die. Allerdings muss ich auch hinzufügen von Einträgen in der Datenbank (z.B. eine neue person und deren Wohnsitz in einem Land) und in diesem Szenario müssen übersetzen aus dem Land Zeichenfolge, die eingegeben wird, in einer form, die den ganzzahligen Wert. Wieder, dies ist nur ein Anwendungsbeispiel, aber das Ziel bleibt das gleiche. Ich brauche eine Tabelle, übersetzen in beide Richtungen zwischen einem string-Wert und eine aufgelistete int-Wert. Die naheliegendste Sache zu tun, ist zu halten ein array (für den int in string translation) und eine Karte (für den string zu int-übersetzung). Ich lieber nicht manuell pflegen beide Variablen, da dies fehleranfällig ist. Also meine Lösung ist unten zu halten nur ein einzelnes array, und die Konstruktor-Methode erstellt automatisch die Karte zur Laufzeit (wenn das Programm erstmal laufen. Dies hat den Vorteil, dass Sie nicht brauchen, um iteriert über das gesamte array, wenn ich das abrufen der integer-Wert basiert auf den string (das war die andere vorgeschlagene Lösung).

  • Dieser thread eine Weile zurück zu sein scheint, was Sie suchen. stackoverflow.com/questions/8307478/...
  • Ich denke, ich könnte eigentlich gehen mit der 3. option für die Aufrechterhaltung eines map[string]int, und die Erstellung des gespiegelten []string-array in der runtime, so dass ich nicht mehr so anfällig für Fehler spiegeln Sie Sie manuell, und es wäre mehr Leistung bietet, als die Iteration über das array, um zu bestimmen, den index.
Schreibe einen Kommentar