التكرار عبر الـ Vector
جزء من قسم المنطق وتدفّق التنفيذ في رحلة Rust على Coddy. الدرس 11 من 66.
الآن بعد أن عرفت كيفية إنشاء المتجهات والوصول إلى العناصر الفردية، لنتعلّم كيفية معالجة كل عنصر في متجه بطريقة منهجية. تُعد حلقة for مثالية لهذه المهمة، إذ تتيح لك زيارة كل عنصر بالتسلسل.
إليك الصيغة الأساسية للتكرار عبر متجه:
let names = vec!["Alice", "Bob", "Charlie"];
for name in &names {
println!("Hello, {}!", name);
}لاحظ وجود & قبل names - فهذا ينشئ مرجعًا إلى المتجه، مما يتيح لك قراءة كل عنصر دون امتلاك المتجه نفسه. تمنحك كل تكرارة إمكانية الوصول إلى عنصر واحد في كل مرة من خلال متغير الحلقة name.
تتولى حلقة for تلقائيًا التحقق من الحدود نيابةً عنك. وبخلاف الفهرسة اليدوية، لن تحاول أبدًا عن طريق الخطأ الوصول إلى عنصر غير موجود. ستمر الحلقة بعدد من العناصر يساوي تمامًا عدد العناصر التي يحتوي عليها المتجه، مما يجعلها آمنة ومريحة في آنٍ واحد.
يمكنك استخدام هذا النمط مع أي نوع من المتجهات:
let scores = vec![85, 92, 78, 90];
for score in &scores {
println!("Score: {}", score);
}هذا الأسلوب هو الطريقة الأكثر شيوعًا واصطلاحية لمعالجة جميع العناصر في متجه عندما تحتاج إلى قراءة قيمها.
التحدي
سهلاكتب دالة sum_all_elements تأخذ متجهًا numbers وتُرجع مجموع جميع عناصره.
استخدم حلقة for للتكرار عبر المتجه وتجميع مجموع جميع العناصر.
المعلمات:
numbers(Vec<i32>): متجه الأعداد الصحيحة المراد جمعها
القيمة المُرجعة: مجموع جميع العناصر في المتجه (i32)
جرّب بنفسك
fn sum_all_elements(numbers: Vec<i32>) -> i32 {
// اكتب الكود هنا
}
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفّق التنفيذ
1تدفق التحكم المتقدم
تعبير 'match'مطابقة قيم متعددةمطابقة النطاقاتتعبير 'if let'الحلقات التكرارية كتعبيراتمراجعة - محلل أوامر بسيط4تجميع البيانات باستخدام Structs
ما هو الـ Struct؟نظرة عامة على الـ Structsالوصول إلى حقول الـ Structالـ Structs القابلة للتعديلالـ Structs كمعاملات للدوالالـ Tuple Structsمراجعة - إنشاء Book Struct7معالجة الأخطاء باستخدام 'Result'
ما هو 'Result'؟استخدام 'match' مع 'Result'is_ok() و is_err()اختصارات: unwrap و expectعامل علامة الاستفهام '?'تحويل السلاسل النصية إلى أرقامملخص - دالة القسمة الآمنة10الـ Closures والدوال المجهولة
ما هو الـ Closure؟تعريف Closure بسيطالـ Closures مع المعاملاتالتقاط البيئة المحيطةملخص - Closure الجامع البسيط2مقدمة في الـ Vectors
ما هو الـ Vector؟إنشاء Vectorإضافة عناصر باستخدام pushالوصول إلى عناصر الـ Vectorالتكرار عبر الـ Vectorالتكرار القابل للتعديل (Mutable Iteration)إزالة العناصرمراجعة - متتبع نقاط بسيط5أزواج (المفتاح والقيمة) مع Hash Maps
ما هو Hash Map؟إنشاء Hash Mapإدراج أزواج (المفتاح والقيمة)الوصول إلى القيمالتكرار عبر Hash Mapتحديث قيمةإزالة زوجملخص - عداد الكلمات6التعامل مع غياب القيم باستخدام 'Option'
ما هو الـ 'Option'؟استخدام 'match' مع 'Option''is_some()' و 'is_none()'فك تغليف الـ 'Option'الدالة 'expect'توفير قيمة افتراضية: 'unwrap_or'مراجعة - البحث عن عنصر9شرائح الـ String والمزيد
String مقابل &strإنشاء شرائح الـ Stringالشرائح كمعاملات للدوالشرائح أخرىمراجعة - إيجاد الكلمة الأولىتدرّب بنفسك: مترجم Rust عبر الإنترنت