גישה לערכים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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 מאלצת אותך לטפל בשתי האפשרויות — למצוא את הערך או לא למצוא אותו — וכך הקוד שלך נעשה חסין יותר וצפוי יותר.
אתגר
קלתקבל שתי כניסות: שם של מדינה ושם של עיר בירה. צור מפת גיבוב ששומרת שמות של מדינות כמפתחות (מסוג 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, הוסף את המדינה ואת עיר הבירה, ואז חפש את המדינה
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
1זרימת בקרה מתקדמת
ביטוי 'match'התאמה למספר ערכיםהתאמה לטווחיםביטוי 'if let'לולאות כביטוייםסיכום – מנתח פקודות פשוט4קיבוץ נתונים באמצעות מבנים
מהו מבנה?סקירה כללית על מבניםגישה לשדות במבנהמבנים הניתנים לשינוימבנים כפרמטרים של פונקציהמבני טופלסיכום – יצירת מבנה ספר7טיפול בשגיאות באמצעות 'Result'
מהו 'Result'?שימוש ב-'match' עם 'Result'is_ok() ו-is_err()קיצורי דרך: unwrap ו-expectאופרטור סימן השאלה '?'המרת מחרוזות למספריםסיכום - פונקציית חילוק בטוחה10Closures ופונקציות אנונימיות
מהו Closure?הגדרת Closure פשוטClosures עם פרמטריםלכידת הסביבהסיכום – Closure פשוט לחיבור2מבוא לווקטורים
מהו וקטור?יצירת וקטורהוספת איברים באמצעות pushגישה לאיברי וקטורמעבר על וקטורמעבר ניתן לשינויהסרת איבריםסיכום – מעקב בסיסי אחר ניקוד5זוגות מפתח-ערך באמצעות מפות גיבוב
מהי מפת גיבוב?יצירת מפת גיבובהוספת זוגות מפתח-ערךגישה לערכיםמעבר על מפת גיבובעדכון ערךהסרת זוגסיכום – מונה מיליםתרגלו בעצמכם: קומפיילר Rust אונליין