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).
Tantangan
MudahKamu 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
HashMapdaristd::collections - Buat hash map yang mutable dengan tipe
HashMap<String, i32> - Baca input pertama dan ubah menjadi
i32untuk mendapatkan jumlah nama pemain - Gunakan perulangan untuk membaca
nnama pemain - Untuk setiap nama pemain, gunakan
.entry(name).or_insert(100)untuk menambahkannya dengan skor100jika 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) nbaris 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]
}Pelajaran ini berisi kuis singkat. Mulai pelajarannya untuk menjawab kuis dan melacak progresmu.
Semua pelajaran di Logika dan Alur
1Alur Kontrol Lanjutan
Ekspresi 'match'Mencocokkan Beberapa NilaiMencocokkan RentangEkspresi 'if let'Perulangan sebagai EkspresiRangkuman, Parser Perintah Sederhana4Mengelompokkan Data dengan Struct
Apa Itu Struct?Ringkasan StructMengakses Field StructStruct yang Dapat DiubahStruct sebagai Parameter FungsiStruct TupleRangkuman: Buat Struct Buku2Pengantar Vektor
Apa Itu Vektor?Membuat VektorMenambahkan Elemen dengan pushMengakses Elemen VektorMelakukan Iterasi pada VektorIterasi MutableMenghapus ElemenRangkuman: Pelacak Skor Dasar5Pasangan Kunci-Nilai dengan Hash Map
Apa Itu Hash Map?Membuat Hash MapMenyisipkan Pasangan Kunci-NilaiMengakses NilaiMenelusuri Hash MapMemperbarui NilaiMenghapus PasanganRangkuman: Penghitung Kata8Proyek: Inventaris Barang Sederhana
Menyiapkan ProyekMenambahkan BarangMemeriksa StokMenjual BarangMenyatukan Semuanya3Daftar Tugas Baris Perintah
Penyiapan ProyekMenambahkan TugasMelihat Semua TugasMenghapus TugasKode AkhirLatihan sendiri: Compiler Rust online