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.
Du musst angemeldet sein, um einen Kommentar abzugeben.
In beiden Fällen sollten Sie nur mit der eingebauten range-Funktion.
Können Sie build-helper-Funktionen oder was auch immer du gerne auf der Oberseite von diesem aber
range
grundlegend ist der Mechanismus für den Zugriff auf diese Daten. Wenn Sie möchten, eine "indexof" - Funktion wäre esErhält man den Wert, Sie würde das nur tun
MyArray[i]
einschließlich einen bounds-check oder was auch immer. Hinweis: der pseudo-code oben ist geschrieben in einem Stil, gibt es ein array ist aber praktisch der gleiche code funktioniert für eine map würde ich nur verwenden in der Regel die var-namek
statti
.Angenommen, Sie möchten erste index von word in den Daten der array -
oder fixed-length array
erstellen Funktion
Wert zu erhalten von der Funktion oben, passend zu der Art, übergeben Sie das array mit
array[:]
wie untenHier ist eine Lösung, die ich vorhin erwähnt habe, die funktioniert gut für statische Scheiben (das ist mein Anwendungsfall). Iteration über die Scheibe jedes mal möchte ich den index eines Wertes fügt unnötige Verzögerung, zumal meine statischen Daten während der Laufzeit. Dies schafft eine Struktur, die initialisiert die Scheibe und erstellt die entsprechenden inversen gekennzeichnet. Und dann würde ich die GetKey und GetVal Methoden, die entweder die Zeichenfolge 'key', indem Sie die int 'Wert', oder Holen Sie sich die int 'Wert' durch die Bereitstellung der string 'Schlüssel'. Vielleicht gibt es schon eine Möglichkeit den Schlüssel zu bekommen, der einen bestimmten Wert aus einer map in Go.