Go Programming

Go-Maps optimal durchlaufen

Spread the love

Go’s Maps sind eine grundlegende Datenstruktur zum Speichern von Schlüssel-Wert-Paaren. Das effiziente Iterieren über diese Paare ist für viele Anwendungen entscheidend. Dieser Artikel bietet eine umfassende Anleitung zur Arbeit mit Maps, von der Erstellung bis zur Traversierung, wobei Best Practices und häufige Fallstricke hervorgehoben werden.

Inhaltsverzeichnis

Deklarieren und Initialisieren von Maps

Go Maps werden mit der Funktion make() oder einem Composite Literal deklariert. make() ermöglicht die Angabe einer anfänglichen Kapazität, wodurch die Leistung bei großen Maps verbessert wird. Composite Literale sind für kleinere, statisch definierte Maps prägnanter.


package main

import "fmt"

func main() {
  // Mit make()
  myMap := make(map[string]int, 10) //Anfangsgröße von 10
  myMap["apple"] = 1
  myMap["banana"] = 2
  myMap["cherry"] = 3

  // Mit Composite Literal
  anotherMap := map[string]int{
    "apple":  1,
    "banana": 2,
    "cherry": 3,
  }

  fmt.Println("myMap:", myMap)
  fmt.Println("anotherMap:", anotherMap)
}

Iterieren über Maps

Die Standardmethode zum Iterieren über eine Go Map ist die Verwendung einer for...range-Schleife. Wichtig ist, dass die Iterationsreihenfolge nicht garantiert ist und zwischen den Läufen variieren kann. Verlassen Sie sich nicht auf eine bestimmte Reihenfolge für Ihre Programmlogik.


package main

import "fmt"

func main() {
  myMap := map[string]int{
    "apple":  1,
    "banana": 2,
    "cherry": 3,
  }

  for key, value := range myMap {
    fmt.Printf("Key: %s, Value: %dn", key, value)
  }
}

Selektives Iterieren über Schlüssel und Werte

Sie können wählen, ob Sie nur über die Schlüssel oder Werte iterieren möchten, indem Sie den leeren Bezeichner _ verwenden, um das unerwünschte Element zu ignorieren:


// Nur über Schlüssel iterieren
for key := range myMap {
    fmt.Println("Key:", key)
}

// Nur über Werte iterieren
for _, value := range myMap {
    fmt.Println("Value:", value)
}

Reihenfolge bei der Iteration beibehalten

Wenn eine bestimmte Iterationsreihenfolge erforderlich ist, müssen Sie eine sortierte Datenstruktur verwenden. Ein Ansatz besteht darin, einen Slice von Schlüsseln zu verwenden, diesen zu sortieren und dann den Slice zu durchlaufen und die entsprechenden Werte aus der Map abzurufen:


package main

import (
	"fmt"
	"sort"
)

func main() {
	myMap := map[string]int{
		"apple":  1,
		"banana": 2,
		"cherry": 3,
	}

	keys := make([]string, 0, len(myMap))
	for k := range myMap {
		keys = append(keys, k)
	}
	sort.Strings(keys)

	for _, k := range keys {
		fmt.Printf("Key: %s, Value: %dn", k, myMap[k])
	}
}

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert