Menu
CoddyTech

Melakukan perulangan pada set

Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 36 dari 68.

Sekarang kamu sudah bisa menambahkan, memeriksa, dan menghapus elemen dari set, saatnya mempelajari cara melakukan iterasi pada semua elemen. Karena set Go-mu dibangun di atas map, kamu bisa menggunakan loop for...range yang sudah dikenal untuk mengakses setiap elemen.

Untuk melakukan perulangan pada set, kamu menggunakan sintaks yang sama seperti saat melakukan perulangan pada map, tetapi kamu hanya perlu memperhatikan kuncinya:

for color := range colors {
    fmt.Println(color)
}

Perhatikan bahwa kita hanya menggunakan satu variabel dalam perulangan range. Karena kita tidak memerlukan nilainya (yang semuanya berupa struct kosong), kita bisa mengabaikannya sepenuhnya. Ini akan mencetak setiap warna dalam set-mu, satu per baris.

Kamu juga bisa menggunakan bentuk dua variabel jika ingin menyatakan dengan jelas bahwa nilainya diabaikan:

for color, _ := range colors {
    fmt.Println(color)
}

Perlu diingat bahwa map di Go tidak menjamin urutan tertentu saat melakukan iterasi, jadi elemen set-mu mungkin dicetak dalam urutan yang berbeda setiap kali kamu menjalankan program. Ini adalah perilaku yang sepenuhnya normal untuk set, karena set dirancang untuk menguji keanggotaan, bukan untuk mempertahankan urutan.

challenge icon

Tantangan

Mudah

Buat penganalisis playlist musik yang memproses koleksi lagu dan menampilkan informasi terperinci tentang setiap playlist menggunakan idiom set Go. Tantangan ini menunjukkan cara melakukan iterasi pada set untuk memeriksa dan melaporkan isinya.

Kamu akan menerima dua input:

  • Sebuah string berisi lagu rock yang dipisahkan dengan koma (misalnya, "Bohemian Rhapsody,Stairway to Heaven,Hotel California,Sweet Child O Mine")
  • Sebuah string berisi lagu pop yang dipisahkan dengan koma (misalnya, "Shape of You,Blinding Lights,Watermelon Sugar,Levitating")

Tugasmu adalah:

  1. Buat dua set menggunakan idiom Go map[string]struct{} untuk menyimpan lagu rock dan lagu pop secara terpisah
  2. Uraikan kedua string input dengan memisahkannya berdasarkan koma untuk mendapatkan judul setiap lagu
  3. Tambahkan setiap lagu ke set yang sesuai menggunakan literal struct kosong {} sebagai nilainya
  4. Tampilkan analisis playlist rock:
    • Header: "Rock Playlist Analysis:"
    • Jumlah: "Total rock songs: [count]"
    • Header lagu: "Songs in rock playlist:"
    • Setiap lagu pada baris terpisah: "♪ [song_title]"
  5. Tampilkan analisis playlist pop:
    • Header: "Pop Playlist Analysis:"
    • Jumlah: "Total pop songs: [count]"
    • Header lagu: "Songs in pop playlist:"
    • Setiap lagu pada baris terpisah: "♪ [song_title]"
  6. Buat playlist gabungan dengan menggabungkan kedua set ke dalam set baru
  7. Tampilkan analisis playlist gabungan:
    • Header: "Combined Playlist Analysis:"
    • Jumlah: "Total unique songs: [count]"
    • Header lagu: "All songs in combined playlist:"
    • Setiap lagu pada baris terpisah: "♫ [song_title]"
  8. Terakhir, tampilkan ringkasan:
    • "Playlist Summary:"
    • "Rock songs: [rock_count]"
    • "Pop songs: [pop_count]"
    • "Combined unique songs: [combined_count]"

Gunakan package strings untuk memisahkan string input berdasarkan koma. Untuk melakukan iterasi pada setiap set, gunakan perulangan for...range dengan satu variabel untuk mengakses key saja (judul lagu). Tantangan ini menunjukkan cara iterasi pada set Go memungkinkanmu memeriksa semua elemen dalam koleksi, sehingga cocok untuk tugas analisis dan pelaporan.

Coba sendiri

package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
	"strings"
)

func main() {
	// Baca baris lengkap dengan bufio.Scanner (menangani judul lagu yang mengandung spasi)
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	rockSongs := scanner.Text()
	scanner.Scan()
	popSongs := scanner.Text()

	// Buat set menggunakan idiom Go map[string]struct{}
	rockSet := make(map[string]struct{})
	popSet := make(map[string]struct{})

	// Uraikan string input dan isi set
	rockList := strings.Split(rockSongs, ",")
	popList := strings.Split(popSongs, ",")

	// TODO: Tulis kodemu di bawah ini
	// Tambahkan lagu ke set masing-masing
	// Tampilkan analisis daftar putar rock (urutkan lagu agar output konsisten)
	// Tampilkan analisis daftar putar pop (urutkan lagu agar output konsisten)
	// Buat dan tampilkan analisis daftar putar gabungan (urutkan lagu agar output konsisten)
	// Tampilkan ringkasan daftar putar
	// Ingat: Ubah kunci map menjadi slice, urutkan, lalu iterasi agar urutannya konsisten

	_ = rockSet
	_ = popSet
	_ = rockList
	_ = popList
	_ = fmt.Sprintf
	_ = sort.Strings
}
quiz iconUji dirimu

Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.

Semua pelajaran di Logika & Alur

Latihan sendiri: Compiler Go online