Go-Sprache Map (Sammlung)

Eine Map ist eine ungeordnete Sammlung von Schlüssel-Wert-Paaren.

Der wichtigste Aspekt einer Map ist, dass sie Daten schnell über den Schlüssel abrufen kann. Der Schlüssel wirkt wie ein Index und verweist auf den Wert der Daten.

Eine Map ist eine Sammlung, daher können wir über sie iterieren, genau wie wir über Arrays und Slices iterieren. Allerdings ist eine Map ungeordnet, und die Reihenfolge der Schlüssel-Wert-Paare, die beim Durchlaufen der Map zurückgegeben werden, ist nicht deterministisch.

Wenn ein Wert aus einer Map abgerufen wird und der Schlüssel nicht existiert, wird der Nullwert dieses Typs zurückgegeben. Zum Beispiel ist der Nullwert für den Typ int 0, und der Nullwert für den Typ string ist "".

Map ist ein Referenztyp. Wenn eine Map an eine Funktion übergeben oder einer anderen Variable zugewiesen wird, zeigen alle auf dieselbe zugrunde liegende Datenstruktur, sodass Änderungen an der Map alle Variablen betreffen, die darauf verweisen.

Map definieren

Sie können die integrierte Funktion make oder das Schlüsselwort map verwenden, um eine Map zu definieren:

/* 使用 make 函数 */
map_variable := make(map[KeyType]ValueType, initialCapacity)

Hierbei ist KeyType der Typ des Schlüssels, ValueType ist der Typ des Werts, und initialCapacity ist ein optionaler Parameter, der verwendet wird, um die Anfangskapazität der Map anzugeben. Die Kapazität einer Map bezieht sich auf die Anzahl der Schlüssel-Wert-Paare, die sie speichern kann. Wenn die Anzahl der Schlüssel-Wert-Paare in der Map die Kapazität erreicht, erweitert sich die Map automatisch. Wenn initialCapacity nicht angegeben ist, wählt die Programmiersprache Go einen geeigneten Wert basierend auf der tatsächlichen Situation.

Beispiel

// Eine leere Map erstellen
m := make(map[string]int)

// Eine Map mit einer Anfangskapazität von 10 erstellen
m := make(map[string]int, 10)

Sie können eine Map auch mit einem Literal erstellen:

// 使用字面量创建 Map
m := map[string]int{
    "apple": 1,
    "banana": 2,
    "orange": 3,
}

Element abrufen:

// 获取键值对
v1 := m["apple"]
v2, ok := m["pear"]  // 如果键不存在,ok 的值为 false,v2 的值为该类型的零值

Element ändern:

// 修改键值对
m["apple"] = 5

Länge einer Map ermitteln:

// 获取 Map 的长度
len := len(m)

Über eine Map iterieren:

// 遍历 Map
for k, v := range m {
    fmt.Printf("key=%s, value=%d\n", k, v)
}

Element löschen:

// 删除键值对
delete(m, "banana")

Beispiel

Das folgende Beispiel demonstriert das Erstellen und Verwenden einer Map:

Beispiel

package main

import "fmt"

func main() {
    var siteMap map[string]string /* Eine Sammlung erstellen */
    siteMap = make(map[string]string)

    /* map fügt Schlüssel-Wert-Paare ein, die Hauptstadt entspricht jedem Land */
    siteMap [ "Google" ] = "Google"
    siteMap [ "Example" ] = "Example"
    siteMap [ "Baidu" ] = "Baidu"
    siteMap [ "Wiki" ] = "Wikipedia"

    /* Den Map-Wert mithilfe des Schlüssels ausgeben */
    for site := range siteMap {
        fmt.Println(site, "Die Hauptstadt ist", siteMap [site])
    }

    /* Prüfen, ob das Element in der Sammlung vorhanden ist */
    name, ok := siteMap [ "Facebook" ] /* Wenn dies wahr ist, ist es vorhanden; andernfalls ist es nicht vorhanden */
    /*fmt.Println(capital) */
    /*fmt.Println(ok) */
    if (ok) {
        fmt.Println("Facebooks Website ist", name)
    } else {
        fmt.Println("Die Facebook-Website existiert nicht")
    }
}

Die Ausgabe des obigen Beispiels ist:

Wiki 首都是 维基百科
Google 首都是 谷歌
Example 首都是 Example
Baidu 首都是 百度
Facebook 站点不存在

delete()-Funktion

Die delete()-Funktion wird verwendet, um Elemente aus einer Sammlung zu löschen. Ihre Parameter sind die Map und der entsprechende Schlüssel. Beispiel:

Beispiel

package main

import "fmt"

func main() {
        /* Map erstellen */
        countryCapitalMap := map[string]string{"Frankreich": "Paris", "Italien": "Rom", "Japan": "Tokio", "Indien": "Neu-Delhi"}

        fmt.Println("Ursprüngliche Map")

        /* Map ausgeben */
        for country := range countryCapitalMap {
                fmt.Println(country, "Die Hauptstadt ist", countryCapitalMap [ country ])
        }

        /* Element löschen */ delete(countryCapitalMap, "Frankreich")
        fmt.Println("Der Eintrag für Frankreich wurde gelöscht")

        fmt.Println("Map nach dem Löschen des Elements")

        /* Map ausgeben */
        for country := range countryCapitalMap {
                fmt.Println(country, "Die Hauptstadt ist", countryCapitalMap [ country ])
        }
}

Die Ausgabe des obigen Beispiels ist:

原始地图
India 首都是 New delhi
France 首都是 Paris
Italy 首都是 Rome
Japan 首都是 Tokyo
法国条目被删除
删除元素后地图
Italy 首都是 Rome
Japan 首都是 Tokyo
India 首都是 New delhi
Weitere Erweiterungen