Lompati ke konten utama
Modul 4 · Pelajaran 3 dari 518/50 dalam kursus~12 min
Pelajaran modul (3/5)

Peta: kunci dan nilai

Peta adalah tabel hash kunci→nilai: map[K]V. Peta adalah referensi jenis: diteruskan ke suatu fungsi, mereka berbagi penyimpanan yang sama. Pasti begitu diinisialisasi sebelum Anda dapat menulisnya (dengan make atau literal).

Penciptaan

Go
// with a literal
prices := map[string]int{"pane": 2, "latte": 3}

// with make
counters := make(map[string]int)
counters["a"] = 1

// nil map (readable, NOT writable)
var m map[string]int
fmt.Println(m["x"])    // 0 — ok
// m["y"] = 1          // PANIC

Operasi dasar

Go
m := map[string]int{"a": 1}

m["b"] = 2              // insert/update
v := m["a"]             // get; if missing: zero value
delete(m, "a")          // remove (ok even if the key doesn't exist)
n := len(m)             // number of entries

Koma-ok: membedakan "hilang" dari "nilai nol"

Go
v, ok := m["x"]
if !ok {
    fmt.Println("key missing")
} else {
    fmt.Println("found:", v)
}

Ini satu-satunya cara untuk mengetahui apakah suatu kunci ada, karena m["x"] kembali nilai nol meskipun kuncinya tidak ada. Sebuah pola mendasar.

Iterasi: urutan acak

Go
for k, v := range m {
    fmt.Println(k, v)
}

Kunci: hanya tipe yang sebanding

Kunci harus sebanding: string, angka, bool, penunjuk, saluran, antarmuka, array dengan tipe yang sebanding, struct yang sebanding bidang. Irisan, peta, dan fungsi tidak dapat dibandingkan → tidak bisa menjadi kunci.

Go
m := map[[2]int]string{}   // ok: array is comparable
// m := map[[]int]string{} // ERROR: slice is not comparable

Pola: penghitung

Salah satu kegunaan peta yang paling umum:

Go
words := []string{"a", "b", "a", "c", "b", "a"}
freq := map[string]int{}
for _, w := range words {
    freq[w]++   // access to a missing key is 0 → 0+1 = 1
}
// freq = {"a": 3, "b": 2, "c": 1}

Cobalah

Latihan#go.m4.l3.e1
Upaya: 0Memuat…

Buat map[string]int dengan nilai 'a' -> 1 dan 'b' -> 2, lalu tambahkan 'c' -> 3.

Memuat editor…
Tunjukkan petunjuk

Harafiah: `peta[K]V{"kunci": nilai, ...}`.

Solusi tersedia setelah 3 upaya

Latihan#go.m4.l3.e2
Upaya: 0Memuat…

Gunakan pola koma-ok untuk membaca kunci 'x' (tidak ada) menjadi v, ok dan cetak keduanya.

Memuat editor…
Tunjukkan petunjuk

Dua nilai kembalian: nilai dan kehadiran boolean.

Solusi tersedia setelah 3 upaya

Quiz#go.m4.l3.e3
Siap

Apa yang terjadi ketika menulis ke peta nihil?

Go
var m map[string]int
m["a"] = 1
Pilihan jawaban

Rekap

  • map[K]V: nilai kunci, referensi, didukung hash.
  • Inisialisasi dengan make atau literal; nihil peta → panik saat menulis.
  • v, ok := m[k] adalah satu-satunya cara untuk membedakan "hilang" dari "nilai nol".
  • delete(m, k) menghapus; oke meskipun k tidak ada.
  • range iterasi: urutan acak.
  • Kunci: hanya tipe yang sebanding (tidak ada irisan/peta/fungsi).
  • Pola penghitung: freq[k]++ memanfaatkan nilai nol implisit.