الكود النهائي
جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 19 من 66.
التحدي
سهلستتلقى أربعة مدخلات تمثل سير عمل كامل لقائمة المهام: أولاً، قائمة مهام أولية مفصولة بفاصلة؛ ثانياً، مهمة جديدة لإضافتها؛ ثالثاً، رقم المهمة المراد عرضها (فهرسة تبدأ من 1)؛ ورابعاً، رقم المهمة المراد إزالتها (فهرسة تبدأ من 1). قم بإنشاء مدير قائمة مهام كامل يعالج كل هذه العمليات ويعرض الحالة النهائية.
المتطلبات:
- اقرأ المدخل الأول الذي يحتوي على أوصاف المهام المفصولة بفاصلة (على سبيل المثال،
Buy groceries,Call dentist,Finish homework) - قم بتقسيم السلسلة النصية بواسطة الفواصل وأنشئ متجهًا قابلاً للتعديل (mutable vector) بهذه المهام الأولية
- اقرأ المدخل الثاني وأضف هذه المهمة الجديدة إلى المتجه باستخدام
.push() - اقرأ المدخل الثالث، وقم بتحويله إلى عدد صحيح (رقم المهمة المراد عرضها، يبدأ من 1)
- اقرأ المدخل الرابع، وقم بتحويله إلى عدد صحيح (رقم المهمة المراد إزالتها، يبدأ من 1)
- قم بإزالة المهمة المحددة عن طريق تحويل الفهرس الذي يبدأ من 1 إلى فهرس يبدأ من 0 واستخدام
.remove() - اطبع
Total tasks: Xحيث X هو العدد النهائي للمهام - اطبع
Viewing task: Yحيث Y هو رقم المهمة التي طُلب عرضها - قم بالمرور عبر قائمة المهام النهائية واطبع كل مهمة مع رقمها (يبدأ من 1)
- بالنسبة للمهمة التي تطابق رقم العرض (بعد تعديلات الإزالة)، اطبع:
[X] [task description] (selected) - بالنسبة لجميع المهام الأخرى، اطبع:
[X] [task description]
المدخلات:
- السطر الأول: أوصاف المهام مفصولة بفاصلة (على سبيل المثال،
Buy groceries,Call dentist,Finish homework) - السطر الثاني: مهمة جديدة لإضافتها (على سبيل المثال،
Study for exam) - السطر الثالث: عدد صحيح يمثل رقم المهمة المراد عرضها (فهرسة تبدأ من 1)
- السطر الرابع: عدد صحيح يمثل رقم المهمة المراد إزالتها (فهرسة تبدأ من 1)
المخرجات:
- السطر الأول:
Total tasks: Xحيث X هو العدد النهائي للمهام - السطر الثاني:
Viewing task: Yحيث Y هو رقم العرض المطلوب - الأسطر التالية: كل مهمة مع رقمها بالتنسيق
[X] [task description] - المهمة المحددة (التي تطابق رقم العرض) يجب أن يلحق بها
(selected)
جرّب بنفسك
use std::io::{self, BufRead};
fn main() {
let stdin = io::stdin();
let mut lines = stdin.lock().lines();
// قراءة المهام الأولية المفصولة بفواصل
let initial_tasks = lines.next().unwrap().unwrap();
// قراءة المهمة الجديدة لإضافتها
let new_task = lines.next().unwrap().unwrap();
// قراءة رقم المهمة المراد عرضها (يبدأ من 1)
let view_number: usize = lines.next().unwrap().unwrap().trim().parse().unwrap();
// قراءة رقم المهمة المراد إزالتها (يبدأ من 1)
let remove_number: usize = lines.next().unwrap().unwrap().trim().parse().unwrap();
// TODO: اكتب الكود الخاص بك أدناه
// 1. قم بتقسيم initial_tasks بواسطة الفواصل وإنشاء متجه (vector) قابل للتعديل
// 2. أضف new_task إلى المتجه
// 3. قم بإزالة المهمة عند remove_number (حولها إلى فهرس يبدأ من 0)
// 4. اطبع إجمالي المهام ومعلومات المهمة المعروضة
// 5. قم بالمرور عبر القائمة النهائية واطبع كل مهمة
}جميع دروس Logic & Flow
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الشرائح كمعاملات للدوالشرائح أخرىمراجعة - إيجاد الكلمة الأولى