Heim > Backend-Entwicklung > Golang > Universelle Funktion zum Konvertieren einer Karte in eine Liste in GO

Universelle Funktion zum Konvertieren einer Karte in eine Liste in GO

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
Freigeben: 2024-02-13 20:30:12
nach vorne
820 Leute haben es durchsucht

GO 中将 Map 转换为 List 的通用函数

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!

Frageninhalt

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)
}
Nach dem Login kopieren

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
Nach dem Login kopieren

Wie soll ich die Funktion „maptolist()“ schreiben?

Es muss als Eingabe verwendet werden inputmap map[any]anyinputmap 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.

Problemumgehung

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
}
Nach dem Login kopieren
Die

Parameterm必须是map[k]v,其中kcomparable类型,vany类型。返回类型 []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]]
Nach dem Login kopieren

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]
Nach dem Login kopieren

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!

Verwandte Etiketten:
Quelle:stackoverflow.com
Erklärung dieser Website
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage