Map merupakan built-in data struktur yang menghubungkan nilai dengan kuncinya. Tidak seperti array, dimana nilainya di asosiasikan menggunakan urutan lokasi integer, map dapat menggunakan tipe data lain untuk digunakan sebagai kunci.
Mendefinisikan dan Mengelompokkan Data Menggunakan Map
Map dibuat dengan menggunakan built-in fungsi make()
seperti slice. jenis dari map didefinisikan menggunakan keyword map
, diikuti jenis kunci dalam kurung kotak, dan diikuti jenis nilainya.
Argumen terakhir pada make
merupakan kapasitas dari map. Seperti halnya slice, map ukurannya otomatis disesuaikan, jadi ukuran adalah opsional.
package main
import "fmt"
func main() {
produk := make(map[string]float64, 10)
produk["Topi"] = 45000
produk["Masker"] = 15000
fmt.Println("Ukuran produk:", len(produk))
for k, v := range produk {
fmt.Println(k, v)
}
}
Menggunakan sintak literal
Map juga bisa didefinisikan menggunakan sintak literal, dimana kunci dan nilainya di pisahkan dengan titik dua (:
) dan setiap literal diakhiri dengan tanda koma (,
).
package main
import "fmt"
func main() {
produk := map[string]float64{
"Topi": 45000,
"Masker": 15000,
}
fmt.Println("Ukuran produk:", len(produk))
fmt.Println("Harga:", produk["Topi"])
fmt.Println("Harga:", produk["Tas"])
}
Pada contoh program diatas kita juga mencoba melihat nilai produk dengan kunci Tas
dimana tidak tersedia pada produk map. Ketika program dijalankan nilai yang ditampilkan adalah nol (0
).
Memeriksa nilai pada
Seperti contoh program sebelumnya map mengembalikan nilai 0
ketika disitu tidak ada item dengan kunci tersebut. Hal ini bisa membingungkan antara kita mempunyai data dengan nilai 0
dengan kunci yang tidak didefinisikan.
Untuk mengatasi masalah ini map memiliki dua nilai ketika kita mencoba melihat nilai.
package main
import "fmt"
func main() {
produk := map[string]float64{
"Topi": 45000,
"Masker": 15000,
"Tas":0,
}
fmt.Println(produk["Tas"])
nilai, ok := produk["Tas"]
if ok {
fmt.Println("Harga:", nilai)
} else {
fmt.Println("Produk tidak ada")
}
}
Nilai pertama nilai
merupakan nilai yang dilihat, atau zero value jika tidak ada kunci dalam map tersebut. nilai kedua ok
adalah nilai boolean
dimana jika nilainya ada maka akan mengembalikan nilai true
atau false
jika kunci tidak ada dalam map.
Menghapus Item dari Map
Kita bisa menghapus nilai pada map menggunakan fungsi delete()
. Argumen yang diperlukan oleh fungsi delete()
adalah map dan kunci yang akan dihapus.
package main
import "fmt"
func main() {
produk := map[string]float64{
"Topi": 45000,
"Masker": 15000,
"Tas": 0,
}
delete(produk, "Tas")
nilai, ok := produk["Tas"]
if ok {
fmt.Println("Harga:", nilai)
} else {
fmt.Println("Produk tidak ada")
}
}
Menampilkan Nilai map secara berurutan.
Ketika menambahkan nilai kedalam map, kita tentu tidak dapat menjamin datanya bisa terurut. Jika ingin mengurutkan nilai map kita bisa menggunakan kunci dari map untuk dijadikan slice dan mengurutkannya menggunakan fungsi sort.String()
.
package main
import (
"fmt"
"sort"
)
func main() {
produk := map[string]float64{
"Topi": 45000,
"Masker": 15000,
"Tas": 0,
}
kunci := make([]string, 0, len(produk))
for k, _ := range produk {
kunci = append(kunci, k)
}
sort.Strings(kunci)
for _, k := range kunci {
fmt.Println("Kunci:", k, "Nilai:", produk[k])
}
}