Menu
CoddyTech

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 := products

Operasi 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 
0xc00010e0c0

Solusinya 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.
 

challenge icon

Tantangan

Mudah

Dalam 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

Latihan sendiri: Compiler Go online