Die Karte in der Go-Sprache ist ein ungeordneter Schlüssel-Wert-Paartyp, der entsprechend dem Schlüssel auf den entsprechenden Wert zugreifen kann. In einigen Fällen müssen wir die Daten in der Karte in den Slice-Typ konvertieren, um andere Vorgänge zu erleichtern. In diesem Artikel werden verschiedene Methoden zum Konvertieren einer Golang-Karte in ein Slice vorgestellt.
Methode 1: Verwenden Sie eine for-Schleife, um die Karte zu durchlaufen.
Indem Sie die Karte durch eine for-Schleife durchlaufen, können Sie die Schlüssel-Wert-Paare in der Karte zum Slice hinzufügen eins nach dem anderen. Der spezifische Code lautet wie folgt:
package main import "fmt" func main() { var m map[string]int m = make(map[string]int) m["one"] = 1 m["two"] = 2 m["three"] = 3 keys := make([]string, 0, len(m)) values := make([]int, 0, len(m)) for key, value := range m { keys = append(keys, key) values = append(values, value) } fmt.Println(keys) // [one two three] fmt.Println(values) // [1 2 3] }
Methode 2: Verwenden Sie die Reflect-Bibliothek
reflect ist eine Reflection-Bibliothek in der Go-Sprache, die Typinformationen abrufen, Methoden aufrufen und darauf zugreifen kann Strukturfelder usw. Die Karte kann über die Funktion „reflect.ValueOf()“ in den Typ „reflect.Value“ konvertiert werden, und dann können die Schlüssel-Wert-Paare über die Methode „reflect.Value“ abgerufen werden. Der spezifische Code lautet wie folgt:
package main import ( "fmt" "reflect" ) func main() { var m map[string]int m = make(map[string]int) m["one"] = 1 m["two"] = 2 m["three"] = 3 keys := reflect.ValueOf(m).MapKeys() values := make([]int, 0, len(keys)) for _, key := range keys { values = append(values, m[key.String()]) } fmt.Println(keys) // [one two three] fmt.Println(values) // [1 2 3] }
Methode 3: Verwenden Sie die Bibliothek github.com/mitchellh/mapstructure
mapstructure ist eine Bibliothek, die Strukturen analysiert und Schlüssel-Wert-Paare konvertieren kann in der Karte In entsprechende Felder in der Struktur analysiert. Diese Bibliothek stellt die Funktion Decode() bereit, die die Karte in jede Art von Go-Wert, einschließlich Slice-Typ, analysieren kann. Der spezifische Code lautet wie folgt:
package main import ( "fmt" "github.com/mitchellh/mapstructure" ) func main() { var m map[string]int m = make(map[string]int) m["one"] = 1 m["two"] = 2 m["three"] = 3 values := make([]int, 0, len(m)) err := mapstructure.Decode(m, &values) if err != nil { fmt.Println(err) } else { fmt.Println(values) // [1 2 3] } }
Zusammenfassung:
Die oben genannten drei Methoden können die Karte in den Slice-Typ konvertieren. Unter diesen weist Methode eins eine relativ geringe Leistung auf und eignet sich für die Kartenkonvertierung in kleinem Maßstab. Obwohl Methode zwei die Reflexionsbibliothek verwendet, ist ihre Effizienz immer noch höher als Methode eins. Methode drei besteht darin, eine Bibliothek eines Drittanbieters zu verwenden, was praktisch und schnell ist und sich für Situationen eignet, in denen die Kartendaten relativ komplex sind. Wir können je nach Szenario unterschiedliche Konvertierungsmethoden auswählen.
Das obige ist der detaillierte Inhalt vonGolang-Karte zum Schneiden. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!