Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

التكرار عبر Hash Map

جزء من قسم المنطق وتدفّق التنفيذ في رحلة Rust على Coddy. الدرس 31 من 66.

أحيانًا تحتاج إلى فحص كل زوج من أزواج المفتاح والقيمة في خريطة التجزئة الخاصة بك، بدلًا من البحث عن مفاتيح محددة. توفر Rust طريقة بسيطة للتكرار عبر جميع البيانات باستخدام حلقة for:

for (key, value) in &my_map {
    println!("{}: {}", key, value);
}

لاحظ وجود & قبل my_map — فهذا ينشئ مرجعًا إلى خريطة التجزئة، بحيث يمكنك التكرار دون نقل الملكية. تمنحك الحلقة كل زوج من المفتاح والقيمة على هيئة صف، ويمكنك تفكيكه مباشرةً في تعريف الحلقة.

إليك مثالًا عمليًا باستخدام قائمة أسعار:

let mut prices = HashMap::new();
prices.insert("apple", 1.20);
prices.insert("banana", 0.80);

for (item, price) in &prices {
    println!("{} costs ${:.2}", item, price);
}

هناك تفصيل مهم يجب تذكّره: hash maps لا تضمن أي ترتيب محدد للتكرار. قد تظهر أزواج البيانات بتسلسل مختلف في كل مرة تشغّل فيها برنامجك. يعود ذلك إلى أن hash maps تعطي الأولوية لعمليات البحث السريعة على الحفاظ على ترتيب الإدراج، لذا لا تعتمد على ظهور العناصر بتسلسل معين عند إجراء التكرار.

challenge icon

التحدي

سهل

ستتلقى عددًا صحيحًا n يشير إلى عدد أزواج student-score المطلوب معالجتها. ثم ستتلقى n أزواج من inputs: اسم student متبوعًا بدرجة الاختبار الخاصة به (كعدد صحيح). أنشئ hash map لتخزين أسماء students كمفاتيح ودرجاتهم كقيم. بعد إدراج جميع الأزواج، نفّذ Iterate على hash map واطبع اسم كل student ودرجته.

المتطلبات:

  • استورد HashMap من std::collections
  • أنشئ hash map mutable بالأنواع HashMap<String, i32>
  • اقرأ input الأول وحوّله إلى i32 للحصول على عدد الأزواج
  • استخدم حلقة لقراءة n أزواج من inputs (اسم student، ثم الدرجة)
  • أدرج اسم كل student ودرجته في hash map
  • استخدم حلقة for لتنفيذ Iterate على hash map باستخدام &map
  • اطبع معلومات كل student بالتنسيق: [name]: [score]
  • اطبع الأزواج بأي ترتيب (لا تضمن hash maps ترتيبًا)

Input:

  • السطر الأول: عدد صحيح n (مثلًا: 3)
  • الأزواج التالية وعددها n من الأسطر:
    • اسم student (مثلًا: Alice)
    • درجة الاختبار كعدد صحيح (مثلًا: 95)

Output:

  • سطر واحد لكل student بالتنسيق: [name]: [score]
  • قد يختلف ترتيب أسطر Output بين عمليات تشغيل الاختبار

جرّب بنفسك

use std::collections::HashMap;
use std::io::{self, BufRead};

fn main() {
    let stdin = io::stdin();
    let mut lines = stdin.lock().lines();
    
    // اقرأ عدد أزواج الطالب-الدرجة
    let n: i32 = lines.next().unwrap().unwrap().trim().parse().unwrap();
    
    // أنشئ خريطة تجزئة قابلة للتغيير لتخزين أسماء الطلاب والدرجات
    let mut students: HashMap<String, i32> = HashMap::new();
    
    // TODO: اكتب الكود الخاص بك أدناه
    // اقرأ n زوجًا من المدخلات (اسم الطالب والدرجة) وأدرجها في خريطة التجزئة
    
    
    
    // TODO: كرر على خريطة التجزئة واطبع اسم ودرجة كل طالب
    
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس المنطق وتدفّق التنفيذ

تدرّب بنفسك: مترجم Rust عبر الإنترنت