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

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

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

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

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

    for num in numbers.iter() {}
    // القيم: 1, 2, 3, 4, 5
  • index & القيمة:

    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 هو شريحة، لذا يمكنك استخدام أساليب الشرائح عليه، فعلى سبيل المثال، تُرجع chunk.len() عدد العناصر الموجودة في ذلك chunk. قد يكون chunk الأخير أصغر إذا لم تنقسم المصفوفة بالتساوي.

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

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

هنا، تنتج .chunks(2) الشرائح أولًا، ثم تغلّف .enumerate() كل واحدة منها بعدّاد، لذا فإن i هو index الخاص بـchunk، وchunk هو الشريحة.

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

    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 deals". إذا كانت الحزمة تحتوي على عنصرين، فاطبع المجموع: Bundle N: $Price1 + $Price2 = $Sum. وإذا كانت تحتوي على عنصر واحد فقط، فاطبع: Bundle N: $Price.
  3. Apply خصمًا بنسبة 10% على جميع الأسعار (باستخدام iter_mut).
  4. طباعة الأسعار النهائية بعد الخصم، كل سعر في سطر جديد، مع تنسيقه إلى منزلتين عشريتين (مثلًا: $2.48).

Hint: يمكنك ربط المُكررات معًا، على سبيل المثال، prices.chunks(2).enumerate() gives لك كلًا من فهرس chunk وقطعة chunk في آن واحد. كل chunk عبارة عن slice، لذا يمكنك استدعاء chunk.len() عليها وفهرستها باستخدام chunk[0] وchunk[1] وما إلى ذلك.

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

النص exact هو 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() لطباعة رقم كل عنصر والسعر
    // Hint: prices.iter().enumerate() يعطي أزواج (index, &price)
    // قم بتنسيق الأسعار إلى منزلتين عشريتين باستخدام {:.2}، راجع التعليمات للتنسيق الدقيق


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


    // TODO: Use iter_mut() to apply a 10% discount to all prices
    // Hint: اضرب كل *price في 0.9


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

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

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

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

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