التحقق من المخزون
جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 51 من 66.
التحدي
سهلستتلقى أربعة مدخلات. المدخل الأول هو اسم العنصر المراد التحقق منه. المدخل الثاني هو قائمة بأسماء العناصر في المخزون مفصولة بفواصل. المدخل الثالث هو قائمة بالأسعار المقابلة لكل عنصر مفصولة بفواصل. المدخل الرابع هو قائمة بالكميات المقابلة لكل عنصر مفصولة بفواصل. قم ببناء HashMap لتخزين بيانات المخزون حيث يكون المفتاح هو اسم العنصر والقيمة هي tuple تحتوي على السعر والكمية (f64, i32). ثم تحقق مما إذا كان العنصر المطلوب موجوداً في المخزون باستخدام .get() واطبع معلومات المخزون المناسبة.
المتطلبات:
- استيراد
HashMapمنstd::collections - قراءة المدخل الأول (اسم العنصر المراد التحقق منه) وإزالة المسافات البيضاء
- قراءة المدخل الثاني (أسماء العناصر المفصولة بفواصل) وإزالة المسافات البيضاء
- قراءة المدخل الثالث (الأسعار المفصولة بفواصل) وإزالة المسافات البيضاء
- قراءة المدخل الرابع (الكميات المفصولة بفواصل) وإزالة المسافات البيضاء
- إنشاء
HashMap<String, (f64, i32)>قابل للتعديل للمخزون - تقسيم أسماء العناصر بواسطة الفواصل
- تقسيم الأسعار بواسطة الفواصل وتحويل كل منها إلى
f64 - تقسيم الكميات بواسطة الفواصل وتحويل كل منها إلى
i32 - إدراج كل عنصر في المخزون مع السعر والكمية المقابلين له كـ tuple
- استخدام
.get()للتحقق مما إذا كان العنصر المطلوب موجوداً في المخزون - استخدام تعبير
matchللتعامل مع الـOptionالذي يتم إرجاعه بواسطة.get() - في ذراع
Some، استخرج السعر والكمية من الـ tuple واطبع:[item_name] is in stockPrice: $[price]Quantity: [quantity]
- في ذراع
None، اطبع:[item_name] is not in stock
المدخلات:
- السطر الأول: اسم العنصر المراد التحقق منه (مثال:
Laptop) - السطر الثاني: أسماء العناصر مفصولة بفواصل (مثال:
Laptop,Mouse,Keyboard) - السطر الثالث: الأسعار مفصولة بفواصل (مثال:
999.99,25.50,75.00) - السطر الرابع: الكميات مفصولة بفواصل (مثال:
15,50,30)
المخرجات:
- إذا كان العنصر موجوداً في المخزون:
- السطر الأول:
[item_name] is in stock - السطر الثاني:
Price: $[price] - السطر الثالث:
Quantity: [quantity]
- السطر الأول:
- إذا لم يكن العنصر موجوداً:
[item_name] is not in stock
جرّب بنفسك
use std::collections::HashMap;
use std::io;
fn main() {
// قراءة اسم العنصر للتحقق منه
let mut item_to_check = String::new();
io::stdin().read_line(&mut item_to_check).expect("Failed to read line");
let item_to_check = item_to_check.trim();
// قراءة أسماء العناصر المفصولة بفاصلة
let mut items_input = String::new();
io::stdin().read_line(&mut items_input).expect("Failed to read line");
let items_input = items_input.trim();
// قراءة الأسعار المفصولة بفاصلة
let mut prices_input = String::new();
io::stdin().read_line(&mut prices_input).expect("Failed to read line");
let prices_input = prices_input.trim();
// قراءة الكميات المفصولة بفاصلة
let mut quantities_input = String::new();
io::stdin().read_line(&mut quantities_input).expect("Failed to read line");
let quantities_input = quantities_input.trim();
// TODO: اكتب الكود الخاص بك أدناه
// إنشاء HashMap لتخزين بيانات المخزون
// تقسيم المدخلات وملء الـ HashMap
// استخدم .get() للتحقق مما إذا كان العنصر موجوداً
// استخدم match للتعامل مع الـ Option وطباعة المخرجات المناسبة
}جميع دروس 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الشرائح كمعاملات للدوالشرائح أخرىمراجعة - إيجاد الكلمة الأولى