דילוג לתוכן המרכזי
מודול 7 · שיעור 1 מתוך 213/14 בקורס~12 min
שיעורי מודול (1/2)

אוספים ו-HashMap

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

שני האוספים הנפוצים ביותר ב-Rust הם וקטורים (Vec<T>) ומפות מפתח-ערך (HashMap<K, V>).


וקטורים (Vec<T>)

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

Rust
fn main() {
    // Creating an empty mutable vector
    let mut v: Vec<i32> = Vec::new();

    // Or using the vec! macro
    let mut v2 = vec![1, 2, 3];

    // Appending elements
    v.push(5);
    v.push(6);

    // Accessing elements by index
    let third = v2[2];
    println!("The third element is: {}", third);
}

HashMap (HashMap<K, V>)

אוסף HashMap<K, V> מאחסן מיפוי של מפתחות מסוג K לערכים מסוג V. הוא פועל באמצעות פונקציית גיבוב, שקובעת כיצד מפתחות וערכים אלו ממוקמים בזיכרון. זה שימושי ביותר כאשר אתה רוצה לחפש נתונים לא לפי אינדקס מספרי, אלא לפי מפתח (כגון שם או מזהה).

Rust
use std::collections::HashMap;

fn main() {
    let mut scores = HashMap::new();

    // Inserting key-value pair
    scores.insert(String::from("Blue"), 10);
    scores.insert(String::from("Yellow"), 50);

    // Reading a value (returns an Option<&V>)
    let team_name = String::from("Blue");
    let score = scores.get(&team_name);

    match score {
        Some(val) => println!("Score: {}", val),
        None => println!("No score found."),
    }
}

נסה זאת בעצמך

תרגיל 1: פעולות בסיסיות ב-Vec

פעילות גופנית#rust.m7.l1.e1
ניסיונות: 0טוען...

הכריז על וקטור מספר שלם שניתן לשינוי בשם v באמצעות Vec::new(). הוסף את האלמנטים 10, 20 ו-30 ברצף באמצעות שיטת הדחיפה. לבסוף, הדפס את האלמנט הראשון של הווקטור (אינדקס 0) באמצעות println!.

טוען עורך...
הצג רמז

השתמש ב-'let mut v = Vec::new();' כדי לאתחל את הווקטור, הכנס אלמנטים עם 'v.push(value)' וגישה עם 'v[0]'.

הפתרון זמין לאחר 3 ניסיונות

תרגיל 2: ציוני משתמש עם HashMap

פעילות גופנית#rust.m7.l1.e2
ניסיונות: 0טוען...

ייבוא ​​standard::collections::HashMap. בפונקציה הראשית, הכריז על HashMap שניתן לשינוי בשם ציונים לאחסון מפתחות מחרוזת וערכי i32. הכנס ציון של 50 למשתמש 'אליס'. חלץ את הניקוד בבטחה באמצעות שיטת get ו- unwrap() כדי להדפיס אותו.

טוען עורך...
הצג רמז

אל תשכח את `השתמש ב-std::collections::HashMap;`. הוסף עם `scores.insert(String::from("Alice"), 50);`ואחזר את הערך עם`.get("Alice").unwrap()`.

הפתרון זמין לאחר 3 ניסיונות

תרגיל 3: הכפלת ערכים בוקטור

פעילות גופנית#rust.m7.l1.e3
ניסיונות: 0טוען...

הגדר פונקציה בשם double_values ​​שמקבלת הפניה לפרוסה של מספרים שלמים &[i32] ומחזירה Vec<i32> חדש המכיל את אותם אלמנטים כפול 2.

טוען עורך...
הצג רמז

הפונקציה צריכה לחזור על רכיבי הפרוסה ולהכניס אותם כפול 2 לוקטור החדש שיוחזר.

הפתרון זמין לאחר 3 ניסיונות