Menu
Coddy logo textTech

הסרת זוג

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 33 מתוך 66.

לפעמים צריך להסיר נתונים מהמפה הגיבובית שלך לחלוטין. Rust מספקת את המתודה .remove() כדי למחוק זוג מפתח-ערך באמצעות ציון המפתח:

let mut inventory = HashMap::new();
inventory.insert("apples", 50);
inventory.insert("bananas", 30);

// הסר לחלוטין את הרשומה "apples"
inventory.remove("apples");

השיטה .remove() מקבלת את המפתח כפרמטר ומסירה הן את המפתח והן את הערך המשויך אליו ממפת הגיבוב. לאחר קריאה ל־.remove("apples"), ניסיון לחפש את "apples" יחזיר None.

בדומה לפעולות רבות ב־hash map, הפעולה .remove() מחזירה Option. היא מחזירה Some(value) שמכיל את הערך שהוסר אם המפתח היה קיים, או None אם המפתח לא נמצא:

let removed_value = inventory.remove("bananas");
match removed_value {
    Some(count) => println!("Removed {} bananas", count),
    None => println!("No bananas found to remove"),
}

ערך ההחזרה הזה מאפשר לך לדעת אם ההסרה הצליחה, ומעניק לך גישה לערך שהוסר, דבר שיכול להיות שימושי לרישום ביומן או לפעולות ניקוי.

challenge icon

אתגר

קל

תקבלו מספר שלם n המציין את מספר הפריטים במלאי. לאחר מכן תקבלו n זוגות של קלטים: שם של פריט ולאחריו הכמות שלו (כמספר שלם). לאחר מכן תקבלו קלט נוסף עם שם של פריט להסרה מהמלאי. צרו מפת גיבוב לאחסון המלאי, הוסיפו את כל הפריטים, הסירו את הפריט שצוין והדפיסו את תוצאת ההסרה יחד עם המלאי שנותר.

דרישות:

  • ייבאו את HashMap מתוך std::collections
  • צרו מפת גיבוב שניתנת לשינוי מהסוג HashMap<String, i32>
  • קראו את הקלט הראשון והמירו אותו ל-i32 כדי לקבל את מספר הפריטים
  • השתמשו בלולאה כדי לקרוא n זוגות של קלטים (שם הפריט, ואז הכמות)
  • הוסיפו כל פריט ואת הכמות שלו למפת הגיבוב
  • קראו קלט נוסף בתור שם הפריט להסרה
  • השתמשו ב-.remove() כדי להסיר את הפריט ממפת הגיבוב
  • השתמשו ב-match כדי לטפל בערך Option שמוחזר על ידי .remove()
  • אם הפריט נמצא והוסר, הדפיסו: Removed [quantity] [item_name]
  • אם הפריט לא נמצא, הדפיסו: [item_name] not found
  • לאחר הטיפול בהסרה, עברו על מפת הגיבוב שנותרה והדפיסו כל פריט בפורמט: [item_name]: [quantity]

קלט:

  • שורה ראשונה: מספר שלם n (לדוגמה, 3)
  • n זוגות השורות הבאים:
    • שם הפריט (לדוגמה, apples)
    • כמות כמספר שלם (לדוגמה, 50)
  • שורה אחרונה: שם הפריט להסרה (לדוגמה, bananas)

פלט:

  • שורה ראשונה: Removed [quantity] [item_name] או [item_name] not found
  • השורות הבאות: שורה אחת עבור כל פריט שנותר בפורמט: [item_name]: [quantity]
  • הסדר של הפריטים שנותרו עשוי להשתנות בין הרצות של הבדיקות

נסו בעצמכם

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

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    
    // קרא את מספר הפריטים
    let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
    
    // צור מפת גיבוב ניתנת לשינוי לאחסון המלאי
    let mut inventory: HashMap<String, i32> = HashMap::new();
    
    // קרא n זוגות של ערכי קלט (שם פריט וכמות)
    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: הכנס את הפריט והכמות למפת הגיבוב
    }
    
    // קרא את שם הפריט שיש להסיר
    let item_to_remove = lines.next().unwrap().unwrap().trim().to_string();
    
    // TODO: הסר את הפריט ממפת הגיבוב וטפל בתוצאה באמצעות match
    // הדפס את תוצאת ההסרה (או "Removed [quantity] [item_name]" או "[item_name] not found")
    
    // TODO: עבור על הפריטים שנותרו במלאי והדפס כל פריט בפורמט "[item_name]: [quantity]"
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר Rust אונליין