Apps Artificial Intelligence CSS DevOps Go JavaScript Laravel Linux MongoDB MySQL PHP Python Rust Vue

Cara Ambil Slice Key dari Map di Go

1 min read .
Cara Ambil Slice Key dari Map di Go

Di Go, map itu andalan banget buat nyimpen data dalam bentuk pasangan key → value. Tapi kadang kita nggak butuh valuenya, cuma pengen dapetin semua key aja—misalnya buat iterasi, sorting, atau ngecek sesuatu.

Untungnya, cara ambil key dari map di Go itu simpel banget. Mari kita lihat beberapa pola yang biasa dipakai.

1. Ambil Semua Key dengan For-Range

Trik dasar: loop aja map-nya, terus masukin key ke slice.

func getMapKeys(m map[string]int) []string {
	keys := make([]string, 0, len(m))
	for k := range m {
		keys = append(keys, k)
	}
	return keys
}

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

	keys := getMapKeys(myMap)
	fmt.Println("Keys:", keys)
}

Di sini, saya bikin slice kosong dengan kapasitas sama kayak panjang map (biar lebih efisien). Hasilnya: semua key terkumpul rapi di slice.

2. Urutkan Key

Kalau cuma ngambil key sih gampang. Tapi kalau mau ditampilkan atau diproses dengan urutan tertentu, biasanya kita sort dulu.

import "sort"

func getMapKeys(m map[string]int) []string {
	keys := make([]string, 0, len(m))
	for k := range m {
		keys = append(keys, k)
	}
	sort.Strings(keys)
	return keys
}

Contohnya:

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

keys := getMapKeys(myMap)
fmt.Println("Sorted Keys:", keys) // [apple banana cherry]

3. Kalau Key-nya Bukan String

Map di Go bisa pakai tipe kustom juga sebagai key (asal comparable). Prinsipnya sama: kumpulin dulu, baru urutkan kalau perlu.

type Person struct {
	Name string
	Age  int
}

func getMapKeys(m map[Person]int) []Person {
	keys := make([]Person, 0, len(m))
	for k := range m {
		keys = append(keys, k)
	}
	sort.Slice(keys, func(i, j int) bool {
		return keys[i].Name < keys[j].Name
	})
	return keys
}
myMap := map[Person]int{
	{"Alice", 30}:   1,
	{"Bob", 25}:     2,
	{"Charlie", 35}: 3,
}

keys := getMapKeys(myMap)
fmt.Println("Sorted Keys:", keys)

Di contoh ini, kita urutkan berdasarkan Name. Bisa juga berdasarkan Age, tergantung kebutuhan.

Ringkasnya

  • Mau ambil semua key dari map? Iterasi aja, kumpulin ke slice.
  • Mau urutan rapi? Pakai sort.
  • Map dengan key kustom? Sama aja, tinggal tentuin cara sortingnya.

Go emang sederhana, tapi fleksibel kalau urusan manipulasi key di map.

Lihat Juga

chevron-up