Menu
CoddyTech

حلقة For المحسنة

جزء من قسم الأساسيات في رحلة Rust على Coddy. الدرس 66 من 75.

هناك طرق مختلفة للتكرار على مصفوفة، وإليك بعضًا منها:
تأمّل المصفوفة التالية:

let numbers = [1, 2, 3, 4, 5];
  • مكرّر مباشر:

    for num in numbers.iter() {}
    // القيم: 1, 2, 3, 4, 5
  • الفهرس والقيمة:

    for (index, value) in numbers.iter().enumerate() { }
    // القيم: (0,1), (1,2), (2,3), (3,4), (4,5)
  • شرائح بحجم محدد:

    for chunk in numbers.chunks(2) { }
    // القيم: [1,2], [3,4], [5]

    كل جزء هو شريحة، لذا يمكنك استخدام طرق الشرائح عليه، فعلى سبيل المثال، تُعيد chunk.len() عدد العناصر الموجودة في ذلك الجزء. قد يكون الجزء الأخير أصغر إذا لم يكن حجم المصفوفة قابلًا للقسمة بالتساوي.

يمكنك أيضًا إلحاق .enumerate() بـ .chunks() للحصول على فهرس والقطعة في الوقت نفسه:

for (i, chunk) in numbers.chunks(2).enumerate() { }
// القيم: (0,[1,2]), (1,[3,4]), (2,[5])

هنا، تُنتج .chunks(2) الشرائح أولًا، ثم تُرفق .enumerate() بكل واحدة منها عدّادًا، لذا فإن i هو فهرس القطعة وchunk هي الشريحة.

  • التكرار مع التعديل:

    let mut numbers = [1, 2, 3, 4, 5];
    for num in numbers.iter_mut() { 
    	*num *= 2;
    }
    // تصبح المصفوفة: [2, 4, 6, 8, 10]
challenge icon

التحدي

سهل

أنشئ برنامجًا يعالج قائمة تسوق تضم عناصر وأسعارها، ويعرض البيانات بطرق مختلفة.

ينبغي أن يقوم البرنامج بما يلي:

  1. طباعة رقم كل عنصر وسعره (باستخدام enumerate). نسّقها بالشكل Item N: $Price (مثلًا، Item 1: $2.75).
  2. طباعة الأسعار في أزواج (باستخدام chunks) على شكل «عروض الحزم». إذا كانت الحزمة تضم عنصرين، فاطبع المجموع: Bundle N: $Price1 + $Price2 = $Sum. وإذا كانت تضم عنصرًا واحدًا فقط، فاطبع: Bundle N: $Price.
  3. تطبيق خصم بنسبة 10% على جميع الأسعار (باستخدام iter_mut).
  4. طباعة الأسعار النهائية بعد الخصم، كل سعر في سطر جديد، مع تنسيقه إلى منزلتين عشريتين (مثلًا، $2.48).

تلميح: يمكنك ربط المكررات بعضها ببعض؛ فعلى سبيل المثال، يمنحك prices.chunks(2).enumerate() فهرس كل مجموعة وشريحة المجموعة معًا. كل chunk عبارة عن شريحة، لذا يمكنك استدعاء chunk.len() عليها والوصول إلى عناصرها باستخدام الفهرسة مثل chunk[0] وchunk[1] وغيرها.

التنسيق المتوقع للأسعار:
استخدم ${:.2} لتنسيق الأسعار إلى منزلتين عشريتين.

النص المطابق تمامًا هو Bundle 4: $7.90.

جرّب بنفسك

fn main() {
    let mut prices = [2.75, 1.50, 5.00, 3.5, 4.1, 2.25, 7.9];

    println!("Original Prices:");
    // TODO: استخدم enumerate() لطباعة رقم كل عنصر وسعره
    // تلميح: تُرجع prices.iter().enumerate() أزواجًا من (index, &price)
    // نسّق الأسعار إلى منزلتين عشريتين باستخدام {:.2}، وراجع التعليمات لمعرفة التنسيق الدقيق


    println!("\nBundle Deals:");
    // TODO: اربط chunks(2) وenumerate() معًا: prices.chunks(2).enumerate()
    // ينتج عن ذلك أزواج من (index, chunk)، وكل chunk عبارة عن شريحة، لذا تبيّن chunk.len() حجمها
    // إذا كانت chunk.len() == 2، فاطبع: "Bundle 1: $2.75 + $1.50 = $4.25"
    // إذا كانت chunk.len() == 1، فاطبع سطر العنصر الواحد الموضّح في التعليمات
    // استخدم {:.2} لتنسيق جميع الأسعار إلى منزلتين عشريتين


    // TODO: استخدم iter_mut() لتطبيق 10% discount على جميع الأسعار
    // تلميح: اضرب كل *price في 0.9


    println!("\nPrices after 10% discount:");
    // TODO: اطبع كل سعر بعد الخصم منسّقًا إلى منزلتين عشريتين
    // تنسيق المخرجات المتوقع موضّح في التعليمات

}
quiz iconاختبر نفسك

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

جميع دروس الأساسيات

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