الانتقال إلى المحتوى الرئيسي
الوحدة 7 · الدرس 1 من 213/14 في الدورة~12 min
دروس الوحدة (1/2)

المجموعات وHashMap

المجموعات هي هياكل بيانات قادرة على الاحتفاظ بقيم متعددة. على عكس المصفوفات الأولية وأنواع الصف، يتم تخزين البيانات التي تشير إليها هذه المجموعات على الكومة **، مما يعني أن كمية البيانات لا تحتاج إلى أن تكون معروفة في وقت الترجمة ويمكن ** أن تنمو أو تتقلص ديناميكيًا ** أثناء تنفيذ البرنامج.

المجموعتان الأكثر استخدامًا في 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<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جارٍ التحميل…

استيراد std::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 من المحاولات