Membuat set
Termasuk bagian Logika & Alur dalam perjalanan GO di Coddy. Pelajaran 32 dari 68.
Sekarang setelah kamu memahami konsep di balik idiom set Go, saatnya mempraktikkannya dengan membuat set pertamamu. Prosesnya sederhana dan mengikuti pola yang sudah kamu pelajari dengan map.
Untuk membuat set di Go, kamu mendeklarasikan variabel menggunakan pola map[T]struct{}, dengan T sebagai tipe elemen yang ingin kamu simpan. Berikut cara membuat set untuk menyimpan nama warna yang unik:
colors := make(map[string]struct{})Kamu juga dapat menginisialisasi set dengan beberapa nilai awal menggunakan sintaks literal map:
colors := map[string]struct{}{
"red": {},
"blue": {},
"green": {},
}Perhatikan bahwa setiap nilai adalah literal struct kosong {}. Ini membuat nilai nol dari struct{}, yang tidak menggunakan ruang memori, tetapi tetap memungkinkan kunci ada di dalam map.
Keunggulan pendekatan ini adalah pendekatan ini memanfaatkan infrastruktur map yang sudah ada di Go sekaligus menyediakan semantik set yang sesungguhnya. Setiap nama warna hanya dapat muncul satu kali, dan kamu mendapatkan waktu pencarian yang cepat seperti pada map biasa.
Tantangan
MudahBuat pelacak preferensi bahasa pemrograman yang menunjukkan idiom set Go untuk menyimpan item unik. Tantangan ini menunjukkan cara menggunakan pola map[string]struct{} untuk melacak bahasa pemrograman tanpa duplikat.
Kamu akan menerima dua input:
- String yang mewakili jumlah bahasa yang akan diproses (misalnya,
"6") - String yang berisi bahasa pemrograman yang dipisahkan dengan koma (misalnya,
"Go,Python,JavaScript,Go,Java,Python,C++,JavaScript")
Tugasmu adalah:
- Buat set menggunakan idiom Go
map[string]struct{}untuk menyimpan bahasa pemrograman yang unik - Urai string input dengan memisahkannya berdasarkan koma untuk mendapatkan nama masing-masing bahasa
- Tambahkan setiap bahasa ke set menggunakan literal struct kosong
{}sebagai nilai - Tampilkan hasil pemrosesan dengan mencetak setiap bahasa saat ditemukan:
- Jika bahasa tersebut baru di dalam set:
"Added: [language]" - Jika bahasa tersebut sudah ada di dalam set:
"Already exists: [language]"
- Jika bahasa tersebut baru di dalam set:
- Setelah memproses semua bahasa, tampilkan ringkasan:
"Total languages processed: [total_count]""Unique languages: [unique_count]"
- Terakhir, tampilkan semua bahasa unik di dalam set:
- Header:
"Programming languages in set:" - Setiap bahasa pada baris terpisah:
"- [language]"
- Header:
Gunakan package strings untuk memisahkan string input dan package strconv untuk mengonversi string jumlah menjadi integer. Untuk memeriksa apakah suatu bahasa sudah ada di dalam set sebelum menambahkannya, gunakan idiom comma ok: _, exists := languageSet[language]. Tantangan ini menunjukkan cara idiom set Go menyediakan cara yang efisien untuk melacak item unik dan mencegah duplikat dalam datamu.
Coba sendiri
package main
import (
"fmt"
"sort"
"strconv"
"strings"
)
func main() {
// Baca input
var countStr string
var languagesStr string
fmt.Scanln(&countStr)
fmt.Scanln(&languagesStr)
// Ubah string count menjadi bilangan bulat (tidak diperlukan untuk tantangan ini)
_, _ = strconv.Atoi(countStr)
// Pisahkan string languages berdasarkan koma
languages := strings.Split(languagesStr, ",")
// Buat set menggunakan idiom map[string]struct{}
languageSet := make(map[string]struct{})
// TODO: Tulis kodemu di bawah ini
// Proses setiap bahasa dan periksa apakah sudah ada di set
// Gunakan idiom comma ok: _, exists := languageSet[language]
// Cetak "Added: [language]" atau "Already exists: [language]"
// Tambahkan bahasa ke set menggunakan literal struct kosong {}
// Cetak informasi ringkasan
// Cetak jumlah total bahasa yang diproses dan jumlah bahasa unik
// Cetak semua bahasa unik dalam set
fmt.Println("Programming languages in set:")
// Ubah map menjadi slice, lalu urutkan agar output konsisten
// Tampilkan setiap bahasa dengan format "- [language]"
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika & Alur
1Alur Kontrol Lanjutan
switch dengan `fallthrough`Keluar dari Perulangan BersarangMelanjutkan Perulangan TertentuPernyataan `goto`Rangkuman, Kontrol Perulangan Lanjutan4Proyek: Daftar Tugas Sederhana
Menyiapkan ProyekMenambahkan Tugas2Struct dan Method
Mendefinisikan Method pada StructPenerima NilaiPenerima PointerMemilih PenerimaMethod vs FungsiRekap: Perilaku Struct5Map secara Mendalam
Map Berisi StructPointer sebagai Nilai MapMenguji Map NilMembandingkan MapRingkasan: Penghitung Frekuensi Kata8Proyek: Inventaris Sederhana
Gambaran Umum ProyekMemeriksa Stok3Interface (Dasar)
Apa Itu Interface?Mendefinisikan InterfaceMengimplementasikan InterfaceMenggunakan Tipe InterfaceInterface KosongType AssertionType SwitchRingkasan: Bentuk dan PerilakuLatihan sendiri: Compiler Go online