Menu
Coddy logo textTech

גישה לערכים

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

לאחר ששמרת נתונים במפת גיבוב, תצטרך דרך לאחזר אותם. המתודה .get() מאפשרת לך לחפש ערך באמצעות המפתח שלו:

let value = my_map.get("some_key");

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

כאשר המפתח קיים, .get() מחזירה Some(&value) — שימו לב לסמל &, שמשמעותו שמקבלים הפניה לערך, ולא את הערך עצמו. כאשר המפתח לא קיים, היא מחזירה None:

match capitals.get("France") {
    Some(capital) => println!("The capital is {}", capital),
    None => println!("Country not found"),
}

ייתכן שתבחין שזרוע ההתאמה משתמשת ב־Some(capital) בלי & מפורש. הסיבה לכך היא ש־Rust מטפלת עבורך באופן אוטומטי בהפניה בהקשר הזה: capital עדיין מחזיק הפניה לערך, אבל אין צורך לכתוב & במפורש בתבנית. התאמת התבניות של Rust חכמה מספיק כדי לאפשר לך להשתמש ישירות ב־capital, למשל כשמדפיסים אותו.

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

challenge icon

אתגר

קל

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

הערה: .get() מחזירה Option, כלומר Some(&value) (הפניה לערך) כאשר המפתח קיים, או None כאשר הוא לא קיים. בזרוע של match, אפשר לכתוב Some(capital) ו-Rust תטפל בהפניה באופן אוטומטי, כך שאפשר להשתמש ב-capital ישירות בהוראת ההדפסה.

דרישות:

  • ייבא את HashMap מתוך std::collections
  • צור מפת גיבוב שניתנת לשינוי עם הטיפוסים HashMap<String, String>
  • קרא את הכניסה הראשונה כשם המדינה
  • קרא את הכניסה השנייה כשם עיר הבירה
  • הוסף את המדינה ואת עיר הבירה למפת הגיבוב
  • קרא את הכניסה השלישית כשם המדינה לחיפוש
  • השתמש ב-.get() כדי לאחזר את עיר הבירה של המדינה לחיפוש
  • השתמש ב-match כדי לטפל ב-Option שמוחזר על ידי .get()
  • אם המדינה נמצאה, הדפס: The capital of [country] is [capital]
  • אם המדינה לא נמצאה, הדפס: [country] not found in the map

קלט:

  • שורה ראשונה: שם המדינה להוספה (לדוגמה, France)
  • שורה שנייה: שם עיר הבירה (לדוגמה, Paris)
  • שורה שלישית: שם המדינה לחיפוש (לדוגמה, France או Germany)

פלט:

  • אם המדינה לחיפוש קיימת: The capital of [country] is [capital]
  • אם המדינה לחיפוש לא קיימת: [country] not found in the map

נסו בעצמכם

use std::collections::HashMap;
use std::io;

fn main() {
    // קרא את שם המדינה שיש להוסיף
    let mut country = String::new();
    io::stdin().read_line(&mut country).expect("Failed to read line");
    let country = country.trim().to_string();
    
    // קרא את שם עיר הבירה
    let mut capital = String::new();
    io::stdin().read_line(&mut capital).expect("Failed to read line");
    let capital = capital.trim().to_string();
    
    // קרא את שם המדינה שיש לחפש
    let mut lookup_country = String::new();
    io::stdin().read_line(&mut lookup_country).expect("Failed to read line");
    let lookup_country = lookup_country.trim().to_string();
    
    // TODO: כתוב את הקוד שלך למטה
    // צור HashMap, הוסף את המדינה ואת עיר הבירה, ואז חפש את המדינה
    
}
quiz iconבחנו את עצמכם

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

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

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