Menu
CoddyTech

Menghapus elemen dari set

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

Terkadang kamu perlu menghapus elemen dari set, dan Go memudahkan proses ini dengan fungsi bawaan delete(). Karena set sebenarnya adalah map di baliknya, menghapus elemen bekerja sama persis seperti menghapus key dari map.

Untuk menghapus elemen dari set, gunakan fungsi delete() dengan set dan elemen yang ingin kamu hapus:

delete(colors, "red")

Fungsi delete() menerima dua parameter: map (set milikmu) dan kunci yang ingin kamu hapus. Jika elemen tersebut ada di dalam set, elemen itu akan dihapus. Jika elemen tersebut tidak ada, fungsi tidak melakukan apa pun, tidak ada error yang muncul.

Perilaku ini sangat cocok untuk set karena kamu sering ingin memastikan suatu elemen tidak ada, terlepas dari apakah elemen itu ada sejak awal. Operasi ini cepat dan efisien, serta mempertahankan manfaat performa dari implementasi map yang mendasari Go.

challenge icon

Tantangan

Mudah

Buat sistem pengelolaan buku perpustakaan yang menghapus buku dari koleksi berbagai genre menggunakan idiom set Go. Tantangan ini menunjukkan cara menggunakan fungsi delete() untuk menghapus elemen dari set sambil melacak proses penghapusan.

Kamu akan menerima dua input:

  • String yang berisi buku dalam koleksi fiksi dan dipisahkan dengan koma (misalnya, "1984,Dune,Foundation,Neuromancer,Brave New World")
  • String yang berisi buku yang akan dihapus dan dipisahkan dengan koma (misalnya, "Dune,Harry Potter,Foundation,Twilight,1984")

Tugasmu adalah:

  1. Buat set menggunakan idiom Go map[string]struct{} untuk menyimpan buku fiksi
  2. Parse string input pertama dengan memisahkannya berdasarkan koma untuk mendapatkan judul setiap buku
  3. Tambahkan setiap buku ke set menggunakan literal struct kosong {} sebagai nilainya
  4. Parse string input kedua dengan memisahkannya berdasarkan koma untuk mendapatkan daftar buku yang akan dihapus
  5. Untuk setiap buku yang akan dihapus, periksa apakah buku itu ada di dalam set menggunakan idiom comma ok
  6. Tampilkan proses penghapusan untuk setiap buku yang diproses:
    • Jika buku ada di dalam koleksi: "Removing: [book_title]"
    • Jika buku tidak ada di dalam koleksi: "Not found: [book_title]"
  7. Gunakan fungsi delete() untuk menghapus buku yang ada di dalam set
  8. Setelah memproses semua permintaan penghapusan, tampilkan ringkasan:
    • "Initial collection size: [initial_count]"
    • "Removal requests: [requests_count]"
    • "Books successfully removed: [removed_count]"
    • "Books not found: [not_found_count]"
    • "Final collection size: [final_count]"
  9. Terakhir, daftarkan semua buku yang tersisa di dalam koleksi:
    • Header: "Remaining books in fiction collection:"
    • Setiap buku pada baris terpisah: "- [book_title]"
    • Jika tidak ada buku yang tersisa: "- Collection is empty"

Gunakan package strings untuk memisahkan string input berdasarkan koma. Tantangan ini menunjukkan cara fungsi delete() menghapus elemen dengan aman dari set Go tanpa menimbulkan error, bahkan saat mencoba menghapus elemen yang tidak ada, sehingga fungsi ini cocok untuk operasi pembersihan.

Coba sendiri

package main

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

func main() {
	// Baca input menggunakan Scanner agar judul buku yang mengandung spasi bisa diproses
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	fictionBooks := scanner.Text()
	scanner.Scan()
	booksToRemove := scanner.Text()

	// Uraikan string input
	fictionList := strings.Split(fictionBooks, ",")
	removeList := strings.Split(booksToRemove, ",")

	// TODO: Tulis kodemu di bawah ini
	// 1. Buat set menggunakan map[string]struct{} untuk menyimpan buku fiksi
	// 2. Tambahkan setiap buku dari fictionList ke set
	// 3. Proses setiap buku dalam removeList dan periksa apakah buku itu ada
	// 4. Tampilkan proses penghapusan dan gunakan fungsi delete()
	// 5. Tampilkan ringkasan statistik
	// 6. Tampilkan daftar buku yang tersisa dalam koleksi
	// Ingat untuk mengurutkan buku yang tersisa agar output konsisten

	_ = sort.Strings // hapus baris ini setelah kamu menggunakan sort
	_ = fmt.Println  // hapus baris ini setelah kamu menggunakan fmt
}
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