Salin Peta
Pelajaran 18 dari 21 dalam kursus Slice dan Map di Go di Coddy.
Mirip dengan yang kita lakukan pada slice, kita bisa menyalin map dan menambahkan nilai baru ke dalamnya.
Mari kita lihat map seperti ini:
products := map[string]int{
"MacBook": 5000,
"iPhone": 1000,
"Vision pro": 3000,
}Misalkan kita perlu menyalin map products:
list := productsOperasi ini akan membuat salinan map products ke list. Namun, masalah muncul karena perubahan pada salah satu map akan memengaruhi map lainnya, sebab keduanya berbagi ruang memori yang sama. Kita bisa memverifikasinya dengan mencetak alamat memorinya:
fmt.Printf("%p \n", list)
fmt.Printf("%p", products)Output-nya adalah sebagai berikut:
0xc00010e0c0
0xc00010e0c0Solusinya adalah menggunakan kata kunci make. Pertama, kita mendeklarasikan map menggunakan kata kunci make:
list := make(map[string]int)Sekarang, kamu mungkin bertanya, apa perbedaan antara menggunakan make dan deklarasi sederhana seperti ini:
list := map[string]int{}Sebenarnya, tidak ada perbedaan, kecuali bahwa dengan menggunakan make, kita bisa menentukan panjang map.
list := make(map[string]int, len(products))Di sini, kita menentukan panjangnya sama dengan panjang map yang ingin kita salin.
Catatan: Panjang dalam map tidak seperti pada slice. Meskipun kita menentukan panjangnya, kita bisa melampauinya tanpa masalah.
Sekarang, setelah mendefinisikan map baru, kita bisa menyalin elemen dari products ke map list menggunakan perulangan:
list := make(map[string]int, len(products))
for key, value := range products {
list[key] = value
}Hasilnya adalah:
map[Golang Book:400 Python Book:300 Rust Book:500]Sekarang, jika kita mengubah salah satu map, perubahan itu tidak akan memengaruhi map lainnya.
Tantangan
MudahDalam kode yang diberikan, kita mendefinisikan map produk bernama productByName:
- Buat map baru bernama productByPrice.
- Salin elemen dari map productByName, tetapi dengan cara sebaliknya: price akan menjadi key, dan name akan menjadi value.
- Cetak kedua map ke layar.
Coba sendiri
package main
import "fmt"
func main() {
// Definisikan map produk berdasarkan nama. Jangan ubah ini!
productByName := map[string]int{
"MacBook": 5000,
"iPhone": 1000,
"Vision Pro": 3000,
}
// Buat map baru untuk produk berdasarkan harga
// Salin elemen dari productByName ke productByPrice
// Tampilkan kedua map di layar
fmt.Println("By Name:", )
fmt.Println("By Price:", )
}Semua pelajaran di Slice dan Map di Go
1Pengantar
PengantarLatihan sendiri: Compiler Go online