دروس الوحدة (1/2)
المجموعات وHashMap
المجموعات هي هياكل بيانات قادرة على الاحتفاظ بقيم متعددة. على عكس المصفوفات الأولية وأنواع الصف، يتم تخزين البيانات التي تشير إليها هذه المجموعات على الكومة **، مما يعني أن كمية البيانات لا تحتاج إلى أن تكون معروفة في وقت الترجمة ويمكن ** أن تنمو أو تتقلص ديناميكيًا ** أثناء تنفيذ البرنامج.
المجموعتان الأكثر استخدامًا في Rust هما المتجهات (Vec<T>) و خرائط القيمة الرئيسية (HashMap<K, V>).
المتجهات (Vec<T>)
تسمح لك المتجهات بتخزين أكثر من قيمة من نفس النوع في بنية بيانات واحدة تضع جميع القيم بجانب بعضها البعض في الذاكرة:
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. وهي تعمل عبر وظيفة التجزئة، التي تحدد كيفية وضع هذه المفاتيح والقيم في الذاكرة. وهو مفيد للغاية عندما تريد البحث عن البيانات ليس عن طريق فهرس رقمي، ولكن عن طريق مفتاح (مثل الاسم أو المعرف).
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
قم بتعريف متجه عدد صحيح قابل للتغيير يسمى v باستخدام Vec::new(). أضف العناصر 10 و20 و30 بالتسلسل باستخدام طريقة الدفع. أخيرًا، قم بطباعة العنصر الأول من المتجه (الفهرس 0) باستخدام println!.
إظهار التلميح
استخدم `let mut v = Vec::new();` لتهيئة المتجه وإدراج العناصر باستخدام `v.push(value)` والوصول باستخدام `v[0]`.
الحل متاح بعد 3 من المحاولات
التمرين 2: نتائج المستخدم باستخدام HashMap
استيراد std::collections::HashMap. في الوظيفة الرئيسية، أعلن عن نتائج HashMap قابلة للتغيير لتخزين مفاتيح السلسلة وقيم i32. أدخل درجة 50 للمستخدم "أليس". قم باستخراج النتيجة بأمان باستخدام طريقة get وunwrap() لطباعتها.
إظهار التلميح
لا تنس استخدام std::collections::HashMap;`. أدخل باستخدام `scores.insert(String::from("Alice"), 50);`واجلب القيمة باستخدام`.get("Alice").unwrap()`.
الحل متاح بعد 3 من المحاولات
التمرين 3: مضاعفة القيم في المتجه
حدد دالة باسم double_values تقبل مرجعًا لشريحة من الأعداد الصحيحة &[i32] وترجع Vec<i32> جديد يحتوي على نفس العناصر مضروبة في 2.
إظهار التلميح
يجب أن تتكرر الدالة على عناصر الشريحة وتدرجها مضروبة في 2 في المتجه الجديد الذي سيتم إرجاعه.
الحل متاح بعد 3 من المحاولات