Menu
CoddyTech

Memperbarui Nilai

Termasuk bagian Logika dan Alur dalam perjalanan Rust di Coddy. Pelajaran 32 dari 66.

Terkadang kamu perlu memperbarui nilai dalam hash map dengan berbagai cara. Kamu sudah mempelajari bahwa .insert() akan menimpa nilai yang sudah ada, tetapi bagaimana jika kamu hanya ingin menambahkan nilai saat kuncinya belum ada?

Rust menyediakan API .entry() untuk pembaruan nilai yang lebih canggih. Method paling berguna dalam API ini adalah .or_insert(), yang hanya menyisipkan nilai jika kuncinya belum ada:

let mut scores = HashMap::new();
scores.insert("Alice", 85);

// Ini TIDAK akan menimpa skor Alice
scores.entry("Alice").or_insert(90);

// Ini AKAN menambahkan skor Bob karena Bob belum ada di map
scores.entry("Bob").or_insert(90);

method .entry() mengembalikan enum Entry yang mewakili posisi yang terisi atau kosong di hash map. Saat kamu memanggil .or_insert() padanya, nilai baru hanya akan disisipkan jika entrinya kosong (kuncinya tidak ada).

challenge icon

Tantangan

Mudah

Kamu akan menerima sebuah bilangan bulat n yang menunjukkan jumlah nama pemain yang harus diproses. Kemudian kamu akan menerima n nama pemain sebagai input. Buat hash map untuk mencatat skor pemain (tipe HashMap<String, i32>). Untuk setiap nama pemain yang kamu terima, gunakan .entry() dengan .or_insert() untuk menambahkannya ke map dengan skor awal 100 hanya jika nama tersebut belum ada. Setelah memproses semua nama, cetak setiap pemain beserta skornya.

Persyaratan:

  • Impor HashMap dari std::collections
  • Buat hash map yang mutable dengan tipe HashMap<String, i32>
  • Baca input pertama dan ubah menjadi i32 untuk mendapatkan jumlah nama pemain
  • Gunakan perulangan untuk membaca n nama pemain
  • Untuk setiap nama pemain, gunakan .entry(name).or_insert(100) untuk menambahkannya dengan skor 100 jika nama tersebut belum ada di map
  • Setelah memproses semua nama, iterasikan hash map dan cetak informasi setiap pemain dalam format: [name]: [score]

Input:

  • Baris pertama: Bilangan bulat n (misalnya, 5)
  • n baris berikutnya: Nama pemain (misalnya, Alice, Bob, Alice, Charlie, Bob)

Output:

  • Satu baris untuk setiap pemain unik dalam format: [name]: [score]
  • Urutan baris output dapat berbeda di setiap pengujian

Coba sendiri

use std::collections::HashMap;
use std::io::{self, BufRead};

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    
    // Baca jumlah nama pemain
    let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
    
    // Buat HashMap yang dapat diubah untuk menyimpan skor pemain
    let mut player_scores: HashMap<String, i32> = HashMap::new();
    
    // TODO: Tulis kodemu di bawah ini
    // Baca n nama pemain dan gunakan .entry().or_insert(100) untuk menambahkannya ke HashMap
    
    
    
    // Cetak setiap pemain dan skornya dalam format: [name]: [score]
    
}
quiz iconUji dirimu

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

Semua pelajaran di Logika dan Alur

Latihan sendiri: Compiler Rust online