Menu
CoddyTech

Menambahkan elemen ke set

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

Sekarang setelah kamu membuat set, langkah berikutnya adalah mempelajari cara menambahkan elemen ke dalamnya. Karena set Go sebenarnya menggunakan map di baliknya, menambahkan elemen ke set sama dengan menambahkan kunci ke map.

Untuk menambahkan elemen ke set, kamu cukup menetapkan nilai struct kosong ke kunci baru:

colors["yellow"] = struct{}{}

Sintaks struct{}{} membuat literal struct kosong. struct{} pertama menentukan tipe, dan {} kedua menginisialisasinya. Ini adalah cara standar untuk menambahkan elemen ke set di Go.

Keunggulan pendekatan ini adalah jika kamu mencoba menambahkan elemen yang sama lagi, elemen tersebut hanya akan menimpa entri yang sudah ada, sehingga keunikan set tetap terjaga.

Perhatikan bahwa struct{}{} adalah satu-satunya sintaks yang valid untuk penugasan ini: menulis {} saja tanpa nama tipe akan menyebabkan error kompilasi: missing type in composite literal. Tipe harus selalu dicantumkan secara eksplisit saat menetapkan nilai ke kunci map di luar literal map.

Menambahkan elemen ke set cepat dan mudah, karena memanfaatkan implementasi map Go yang efisien sekaligus memberikan perilaku set yang sesungguhnya untuk melacak item unik.

challenge icon

Tantangan

Mudah

Buat sistem pelacakan keterampilan yang mengelola kemampuan teknis developer menggunakan idiom set Go. Tantangan ini menunjukkan cara menambahkan keterampilan baru ke set sambil mencegah duplikasi dan melacak kemajuan belajar.

Kamu akan menerima dua input:

  • String yang menunjukkan jumlah keterampilan yang diharapkan (misalnya, "5") - ini hanya sebagai referensi
  • String berisi keterampilan yang dipisahkan dengan koma (misalnya, "Go,Docker,Kubernetes,Go,React,Docker,Python")

Tugasmu adalah:

  1. Buat set menggunakan idiom Go map[string]struct{} untuk menyimpan keterampilan teknis yang unik
  2. Inisialisasi set dengan tiga keterampilan awal: "Programming", "Problem Solving", dan "Communication"
  3. Urai string input dengan memisahkannya berdasarkan koma untuk mendapatkan nama setiap keterampilan
  4. Proses SEMUA keterampilan dari string yang dipisahkan koma (telusuri seluruh slice, jangan gunakan parameter jumlah)
  5. Untuk setiap keterampilan dari input, tambahkan ke set menggunakan struct{}{} sebagai nilai
  6. Tampilkan hasil pemrosesan dengan mencetak setiap keterampilan saat diproses:
    • Jika keterampilan belum ada di set: "Learning new skill: [skill]"
    • Jika keterampilan sudah ada di set: "Already mastered: [skill]"
  7. Setelah memproses semua keterampilan, tampilkan ringkasan kemajuan:
    • "Skills processed: [total_processed]" - gunakan panjang slice keterampilan
    • "New skills learned: [new_skills_count]"
    • "Total skills mastered: [total_unique_skills]"
  8. Terakhir, tampilkan semua keterampilan dalam set keterampilan developer:
    • Judul: "Complete skill set:"
    • Setiap keterampilan pada baris terpisah: "✓ [skill]"

Penting: Gunakan range untuk menelusuri semua keterampilan dalam slice, bukan parameter jumlah. Jumlah diberikan sebagai referensi, tetapi tidak boleh mengendalikan perulanganmu. Gunakan package strings untuk memisahkan string input. Untuk memeriksa apakah keterampilan sudah ada sebelum menambahkannya, gunakan idiom comma ok: _, exists := skillSet[skill]. Tantangan ini menunjukkan cara menambahkan elemen ke set Go yang otomatis menangani keunikan sekaligus menyediakan performa pencarian yang cepat untuk pengujian keanggotaan.

Coba sendiri

package main

import (
	"fmt"
	"sort"
	"strconv"
	"strings"
)

func main() {
	// Baca input
	var countStr string
	var skillsStr string
	fmt.Scanln(&countStr)
	fmt.Scanln(&skillsStr)
	
	// Ubah string count menjadi bilangan bulat (hanya sebagai referensi, tidak digunakan dalam perulangan)
	_, _ = strconv.Atoi(countStr)
	
	// Inisialisasi set keterampilan dengan keterampilan awal
	skillSet := map[string]struct{}{
		"Programming":     struct{}{},
		"Problem Solving": struct{}{},
		"Communication":   struct{}{},
	}
	
	// Pisahkan string skills menjadi keterampilan satu per satu
	skills := strings.Split(skillsStr, ",")
	
	// TODO: Tulis kodemu di bawah ini
	// Proses setiap keterampilan menggunakan range untuk menelusuri SEMUA keterampilan dalam slice
	// Gunakan idiom comma ok: _, exists := skillSet[skill]
	// Tambahkan keterampilan baru menggunakan: skillSet[skill] = struct{}{}
	// Tampilkan hasil pemrosesan untuk setiap keterampilan
	// Hitung dan tampilkan ringkasan kemajuan menggunakan len(skills)
	// Tampilkan semua keterampilan dalam set keterampilan lengkap (pertimbangkan pengurutan agar output konsisten)
	
}
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