Menu
CoddyTech

Map Berisi Struct

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

Map menjadi sangat berguna saat kamu menyimpan struct sebagai nilai. Pola ini memungkinkan kamu mengatur data kompleks yang terstruktur menggunakan key yang bermakna agar mudah dicari dan diambil.

Saat kamu menggunakan struct sebagai nilai map, pada dasarnya kamu membuat kumpulan yang setiap key-nya menunjuk ke sebuah record data lengkap. Berikut cara mendeklarasikan dan menginisialisasi map seperti ini:

type Student struct {
    ID    int
    Grade string
}

students := map[string]Student{
    "Alice": {ID: 101, Grade: "A"},
    "Bob":   {ID: 102, Grade: "B"},
}

Kamu bisa mengakses dan mengolah data struct melalui map, sama seperti operasi map lainnya. Untuk mendapatkan informasi siswa, kamu cukup menggunakan nama mereka sebagai kunci:

alice := students["Alice"]
fmt.Println(alice.ID)    // mencetak: 101
fmt.Println(alice.Grade) // mencetak: A

Pola ini sangat umum dalam aplikasi Go untuk menyimpan kumpulan data terkait, seperti profil pengguna, katalog produk, atau pengaturan konfigurasi saat kamu memerlukan data terstruktur dan akses cepat berbasis kunci.

challenge icon

Tantangan

Mudah

Buat sistem pengelolaan nilai siswa menggunakan map dengan struct sebagai nilai. Tantangan ini menunjukkan cara mengatur data siswa yang kompleks menggunakan kunci yang bermakna agar pencarian dan pengambilan data lebih efisien.

Kamu akan menerima dua input:

  • String yang menunjukkan jumlah siswa (contohnya, "4")
  • String yang berisi data siswa dengan format: "name1:id1:grade1,name2:id2:grade2,name3:id3:grade3" (contohnya, "Alice:101:A,Bob:102:B,Charlie:103:C,Diana:104:A")

Tugasmu adalah:

  1. Tentukan struct Student dengan field berikut:
    • ID (int), nomor ID siswa
    • Grade (string), nilai huruf siswa
  2. Buat map dengan nama siswa (string) sebagai kunci dan struct Student sebagai nilai
  3. Uraikan data siswa dari input kedua:
    • Pisahkan input berdasarkan koma untuk mendapatkan setiap entri siswa
    • Untuk setiap entri, pisahkan berdasarkan titik dua untuk memisahkan nama, ID, dan nilai
    • Ubah string ID menjadi bilangan bulat
    • Buat struct Student dan tambahkan ke map dengan nama sebagai kuncinya
  4. Tampilkan semua siswa menurut urutan alfabet nama dengan format: "[name]: ID [id], Grade [grade]"
  5. Hitung dan tampilkan statistik nilai:
    • Hitung jumlah siswa yang memperoleh setiap nilai (A, B, C, D, F)
    • Tampilkan jumlah untuk setiap nilai yang muncul dengan format: "Grade [grade]: [count] students"
    • Tampilkan nilai dalam urutan alfabet (A, B, C, D, F)
  6. Cari dan tampilkan siswa dengan ID tertinggi menggunakan format: "Highest ID: [name] ([id])"
  7. Tampilkan jumlah total siswa: "Total students: [count]"

Gunakan package strconv untuk mengubah string ID menjadi bilangan bulat, dan package sort untuk mengurutkan nama siswa menurut abjad. Tantangan ini menunjukkan cara map dengan nilai struct menyediakan cara yang efisien untuk mengatur dan mengakses kumpulan data kompleks menggunakan pengenal yang bermakna.

Coba sendiri

package main

import (
	"fmt"
)

func main() {
	// Baca input
	var numStudentsStr string
	var studentData string
	fmt.Scanln(&numStudentsStr)
	fmt.Scanln(&studentData)
	
	// TODO: Definisikan struct Student di sini
	
	// TODO: Buat map untuk menyimpan siswa (nama sebagai kunci, struct Student sebagai nilai)
	
	// TODO: Uraikan data siswa dan isi map
	
	// TODO: Tampilkan semua siswa berdasarkan nama dalam urutan alfabet
	
	// TODO: Hitung dan tampilkan statistik nilai
	
	// TODO: Cari dan tampilkan siswa dengan ID tertinggi
	
	// TODO: Tampilkan jumlah seluruh siswa
}
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