Menghapus Pasangan
Termasuk bagian Logika dan Alur dalam perjalanan Rust di Coddy. Pelajaran 33 dari 66.
Terkadang kamu perlu menghapus data dari hash map sepenuhnya. Rust menyediakan method .remove() untuk menghapus pasangan kunci-nilai dengan menentukan kuncinya:
let mut inventory = HashMap::new();
inventory.insert("apples", 50);
inventory.insert("bananas", 30);
// Hapus entri "apples" sepenuhnya
inventory.remove("apples");method .remove() menerima kunci sebagai parameter dan menghapus kunci beserta nilai terkaitnya dari hash map. Setelah memanggil .remove("apples"), mencoba mencari "apples" akan menghasilkan None.
Seperti banyak operasi pada hash map, .remove() mengembalikan Option. Fungsi ini mengembalikan Some(value) yang berisi nilai yang dihapus jika kuncinya ada, atau None jika kuncinya tidak ditemukan:
let removed_value = inventory.remove("bananas");
match removed_value {
Some(count) => println!("Removed {} bananas", count),
None => println!("No bananas found to remove"),
}Nilai kembalian ini memberi tahu kamu apakah penghapusan berhasil dan memberimu akses ke nilai yang dihapus, yang dapat berguna untuk operasi pencatatan atau pembersihan.
Tantangan
MudahKamu akan menerima bilangan bulat n yang menunjukkan jumlah item dalam inventaris. Lalu, kamu akan menerima n pasang input: nama item diikuti jumlahnya (sebagai bilangan bulat). Setelah itu, kamu akan menerima satu input lagi berupa nama item yang akan dihapus dari inventaris. Buat peta hash untuk menyimpan inventaris, masukkan semua item, hapus item yang ditentukan, lalu cetak hasil penghapusan beserta inventaris yang tersisa.
Persyaratan:
- Impor
HashMapdaristd::collections - Buat peta hash yang bisa diubah dengan tipe
HashMap<String, i32> - Baca input pertama dan ubah menjadi
i32untuk mendapatkan jumlah item - Gunakan perulangan untuk membaca
npasang input (nama item, lalu jumlahnya) - Masukkan setiap item dan jumlahnya ke dalam peta hash
- Baca satu input lagi sebagai nama item yang akan dihapus
- Gunakan
.remove()untuk menghapus item dari peta hash - Gunakan
matchuntuk menanganiOptionyang dikembalikan oleh.remove() - Jika item ditemukan dan dihapus, cetak:
Removed [quantity] [item_name] - Jika item tidak ditemukan, cetak:
[item_name] not found - Setelah menangani penghapusan, lakukan iterasi pada peta hash yang tersisa dan cetak setiap item dengan format:
[item_name]: [quantity]
Input:
- Baris pertama: Bilangan bulat
n(misalnya,3) npasang baris berikutnya:- Nama item (misalnya,
apples) - Jumlah sebagai bilangan bulat (misalnya,
50)
- Nama item (misalnya,
- Baris terakhir: Nama item yang akan dihapus (misalnya,
bananas)
Output:
- Baris pertama:
Removed [quantity] [item_name]atau[item_name] not found - Baris berikutnya: Satu baris untuk setiap item yang tersisa dengan format:
[item_name]: [quantity] - Urutan item yang tersisa dapat berbeda pada setiap proses 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 barang
let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
// Buat hash map yang dapat diubah untuk menyimpan inventaris
let mut inventory: HashMap<String, i32> = HashMap::new();
// Baca n pasang input (nama barang dan jumlahnya)
for _ in 0..n {
let item_name = lines.next().unwrap().unwrap().trim().to_string();
let quantity: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
// TODO: Masukkan barang dan jumlahnya ke dalam hash map
}
// Baca nama barang yang akan dihapus
let item_to_remove = lines.next().unwrap().unwrap().trim().to_string();
// TODO: Hapus barang dari hash map dan tangani hasilnya menggunakan match
// Cetak hasil penghapusan (berupa "Removed [quantity] [item_name]" atau "[item_name] not found")
// TODO: Telusuri inventaris yang tersisa dan cetak setiap barang dengan format "[item_name]: [quantity]"
}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