הוספת זוגות מפתח-ערך
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-Rust של Coddy. שיעור 29 מתוך 66.
עכשיו, כשיש לך מפת גיבוב ריקה, הגיע הזמן להוסיף לה נתונים. אפשר להוסיף זוגות מפתח-ערך למפת גיבוב באמצעות המתודה .insert():
let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");המתודה .insert() מקבלת שני פרמטרים: המפתח והערך. בדוגמה הזו, אנחנו מאחסנים שמות של מדינות כמפתחות ואת ערי הבירה שלהן כערכים.
חשוב לזכור התנהגות אחת: אם תכניס מפתח שכבר קיים במפת הגיבוב, הערך החדש יחליף את הערך הישן:
capitals.insert("France", "Lyon"); // פעולה זו מחליפה את הערך הקיים "Paris"לאחר הפעולה הזאת, חיפוש של "France" יחזיר את "Lyon" במקום את "Paris". התנהגות ההחלפה הזאת הופכת את .insert() לשימושית הן להוספת רשומות חדשות והן לעדכון רשומות קיימות במפת הגיבוב שלך.
אתגר
קליתקבלו שלושה קלטים: שם מוצר, המחיר שלו (כמספר עשרוני) ושם של מוצר נוסף. צרו מפת גיבוב ניתנת לשינוי לאחסון שמות המוצרים כמפתחות (מסוג String) והמחירים שלהם כערכים (מסוג f64). הוסיפו למפת הגיבוב את המוצר הראשון עם המחיר שלו. לאחר מכן הוסיפו את המוצר השני במחיר 0.0. לבסוף, עדכנו את מחיר המוצר השני ל־15.99 באמצעות הוספה שלו שוב עם המחיר החדש. הדפיסו את כל המידע בדיוק בפורמט שמופיע למטה.
הערה לגבי .clone(): בעת הוספת משתנה מסוג String כמפתח ל־HashMap, כללי הבעלות של Rust גורמים לכך שהמשתנה יועבר למפה ולא יהיה עוד זמין לשימוש לאחר מכן. כדי להמשיך להשתמש במשתנה (למשל, להדפיס אותו או להוסיף אותו שוב), קראו ל־.clone() עליו בעת העברתו אל insert(). לדוגמה: map.insert(name.clone(), price).
דרישות:
- ייבאו את
HashMapמתוךstd::collections - צרו מפת גיבוב ניתנת לשינוי עם הטיפוסים
HashMap<String, f64> - קראו את הקלט הראשון כשם המוצר הראשון
- קראו את הקלט השני והמירו אותו ל־
f64כדי לקבל את מחיר המוצר הראשון - הוסיפו את המוצר הראשון ואת מחירו למפת הגיבוב באמצעות
.clone()על שם המוצר - קראו את הקלט השלישי כשם המוצר השני
- הוסיפו את המוצר השני במחיר
0.0באמצעות.clone()על שם המוצר - הוסיפו שוב את המוצר השני במחיר
15.99באמצעות.clone()(פעולה זו תחליף את הערך הקודם) - הדפיסו את המידע על שני המוצרים בדיוק בפורמט שמופיע למטה
קלט:
- שורה ראשונה: שם המוצר הראשון (למשל,
Laptop) - שורה שנייה: מחיר המוצר הראשון כמספר עשרוני (למשל,
999.99) - שורה שלישית: שם המוצר השני (למשל,
Mouse)
פלט:
- שורה ראשונה:
Inserted [first_product] at $[price] - שורה שנייה:
Inserted [second_product] at $0.00 - שורה שלישית:
Updated [second_product] to $15.99
נסו בעצמכם
use std::collections::HashMap;
use std::io;
fn main() {
// קראו את הקלטים
let mut product1 = String::new();
io::stdin().read_line(&mut product1).expect("Failed to read line");
let product1 = product1.trim().to_string();
let mut price1_input = String::new();
io::stdin().read_line(&mut price1_input).expect("Failed to read line");
let price1: f64 = price1_input.trim().parse().expect("Failed to parse price");
let mut product2 = String::new();
io::stdin().read_line(&mut product2).expect("Failed to read line");
let product2 = product2.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 אונליין