Heim >Backend-Entwicklung >Golang >Universelle Funktion zum Konvertieren einer Karte in eine Liste in GO
php-Editor Strawberry stellt Ihnen ein praktisches Tool namens „Universelle Funktion zum Konvertieren von Karte in Liste in GO“ vor. Mit dieser Funktion können Sie die Datenstruktur der Schlüsselwertzuordnung (Map) in eine Listendatenstruktur (List) konvertieren. Mit dieser allgemeinen Funktion können Sie komplexe Datenstrukturen einfach in eine prägnantere Form umwandeln und so die Lesbarkeit und Wartbarkeit Ihres Codes verbessern. Unabhängig davon, ob Sie bei der Entwicklung auf ähnliche Anforderungen gestoßen sind oder mehr Techniken zur Konvertierung von Datenstrukturen kennenlernen möchten, wird Ihnen diese universelle Funktion Komfort und Inspiration bieten. Lassen Sie uns dieses nützliche Tool gemeinsam erkunden!
Wie schreibe ich eine Funktion in Go, die jede Karte in eine Liste von Objekten umwandelt (Schlüssel entfernen)?
Zum Beispiel:
func maptolist(inputmap map[any]any) any { var resultlist []any for _, obj := range inputmap { resultlist = append(resultlist, obj) } return resultlist } func main() { mymap := make(map[string]string) mymap["a"] = "1" mymap["b"] = "12" l := maptolist(mymap).([]string) fmt.printf("(%v, %t)\n", l, l) }
gibt Folgendes aus: ([1 12], []string)
Aber ich habe immer Typprobleme und habe keine Lösung gefunden. Ich hatte ein ähnliches Problem bei der Verwendung von Typzusicherungen oder -konvertierungen.
cannot use myMap (variable of type map[string]string) as map[any]any value in argument to mapToList
Wie soll ich die Funktion „maptolist()“ schreiben?
Es muss als Eingabe verwendet werden inputmap map[any]any
或 inputmap any
, da ich jede Art von Karte übergeben möchte (map[string]customstruct; map[int][]customstruct usw.)
Update: Ich habe die Funktion und weitere Details zu den Eingaben hinzugefügt, als ich sie zum ersten Mal geschrieben habe.
Siehe dieses Tutorial zu Generika oder die Sprachspezifikation
any
不是变量类型,它是一个type约束
,可以使用的类型的描述。您需要使用约束 any
Definieren Sie Typparameter und verweisen Sie dann über die Parametersignatur auf den generischen Typ.
// | from this point on, k and v are // | now valid types to use in the function func maptoslice[k comparable, v any](m map[k]v) []v { s := make([]v, 0, len(m)) for _, v := range m { s = append(s, v) } return s }Die
Parameterm
必须是map[k]v
,其中k
是comparable
类型,v
是any
类型。返回类型 []v
sind Slices vom gleichen Typ wie die Werte in der Eingabezuordnung.
Bitte beachten Sie, any
不能用作映射键的约束,因为并非所有类型都可以用作键,只有 可比较的
Typ.
Um die Methode aufzurufen, übergeben Sie dann einen Typ, der die Einschränkung erfüllt (z. B. map[string][]string
), und zeigen Sie optional den Typparameter explizit an.
m := map[string][]string{ "a": {"b", "c"}, "d": {"e", "f"}, } s := maptoslice(m) // or t := maptoslice[string, []string](m) // [[b c] [e f]]
Indem Sie die Typen explizit angeben, können Sie Ihren Code selbst dokumentieren und unerwartete Typprobleme erkennen. Der folgende Code gibt beispielsweise einen Fehler zurück:
v := mapToSlice[string, []int](m) ... ./main.go:14:33: cannot use m (variable of type map[string][]string) as map[string][]int value in argument to mapToSlice[string, []int]
Das obige ist der detaillierte Inhalt vonUniverselle Funktion zum Konvertieren einer Karte in eine Liste in GO. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!