Menu
CoddyTech

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.

challenge icon

Tantangan

Mudah

Kamu 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 HashMap dari std::collections
  • Buat peta hash yang bisa diubah dengan tipe HashMap<String, i32>
  • Baca input pertama dan ubah menjadi i32 untuk mendapatkan jumlah item
  • Gunakan perulangan untuk membaca n pasang 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 match untuk menangani Option yang 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)
  • n pasang baris berikutnya:
    • Nama item (misalnya, apples)
    • Jumlah sebagai bilangan bulat (misalnya, 50)
  • 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]"
}
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