package main

import (
	"fmt"
	"maps"
	"slices"
)

// tambahPoin mengubah map dari dalam fungsi: perubahan terlihat pemanggil.
func tambahPoin(m map[string]int, nama string) {
	m[nama] += 10
}

func main() {
	skor := map[string]int{"Budi": 40, "Siti": 55, "Andi": 30}

	// Menambah key baru dan mengubah key lama.
	skor["Budi"] = 45
	skor["Rina"] = 60
	fmt.Println("skor:", skor)

	// Menghapus key.
	delete(skor, "Andi")
	fmt.Println("setelah delete:", skor)

	// Comma-ok: membedakan key kosong dari key yang tidak ada.
	nilai, ada := skor["Siti"]
	fmt.Println("Siti:", nilai, "ada:", ada)
	nilai, ada = skor["Andi"]
	fmt.Println("Andi:", nilai, "ada:", ada)

	// len menghitung jumlah key di dalam map.
	fmt.Println("len(skor):", len(skor))

	// Iterasi terurut: kunci diurutkan sebelum dicetak.
	for _, nama := range slices.Sorted(maps.Keys(skor)) {
		fmt.Printf("%s=%d\n", nama, skor[nama])
	}

	// Map bersifat reference: perubahan di fungsi terlihat di sini.
	tambahPoin(skor, "Budi")
	fmt.Println("Budi setelah tambahPoin:", skor["Budi"])
}
