إدراج أزواج (المفتاح والقيمة)
جزء من قسم المنطق وتدفّق التنفيذ في رحلة Rust على Coddy. الدرس 29 من 66.
الآن بعد أن أصبحت لديك خريطة تجزئة فارغة، حان وقت إضافة بعض البيانات إليها. يمكنك إدراج أزواج المفتاح والقيمة في خريطة التجزئة باستخدام الطريقة .insert():
let mut capitals = HashMap::new();
capitals.insert("France", "Paris");
capitals.insert("Japan", "Tokyo");تأخذ الطريقة .insert() معلمتين: المفتاح والقيمة. في هذا المثال، نخزّن أسماء البلدان كمفاتيح وعواصمها كقيم.
هناك سلوك مهم يجب تذكّره: إذا أدخلت مفتاحًا موجودًا بالفعل في خريطة التجزئة، فستستبدل القيمة الجديدة القيمة القديمة:
capitals.insert("France", "Lyon"); // هذا يستبدل "Paris"بعد هذه العملية، سيؤدي البحث عن "France" إلى إرجاع "Lyon" بدلًا من "Paris". يجعل سلوك الكتابة فوق القيمة هذا .insert() مفيدًا لإضافة إدخالات جديدة وتحديث الإدخالات الموجودة في خريطة التجزئة.
التحدي
سهلستتلقى ثلاثة مدخلات: اسم منتج، وسعره (كعدد عشري)، واسم منتج آخر. أنشئ خريطة تجزئة قابلة للتغيير لتخزين أسماء المنتجات كمفاتيح (من النوع String) وأسعارها كقيم (من النوع f64). أدرج المنتج الأول مع سعره في خريطة التجزئة. ثم أدرج المنتج الثاني بسعر 0.0. وأخيرًا، حدّث سعر المنتج الثاني إلى 15.99 من خلال إدراجه مرة أخرى بالسعر الجديد. اطبع جميع المعلومات بالتنسيق الدقيق الموضح أدناه.
ملاحظة حول .clone(): عند إدراج متغير من النوع String كمفتاح في HashMap، تعني قواعد الملكية في Rust أن المتغير سيُنقل إلى الخريطة ولن يعود قابلًا للاستخدام بعد ذلك. لمواصلة استخدام المتغير (مثلًا للطباعة أو لإدراجه مرة أخرى)، استدعِ .clone() عليه عند تمريره إلى insert(). على سبيل المثال: map.insert(name.clone(), price).
المتطلبات:
- استورد
HashMapمنstd::collections - أنشئ خريطة تجزئة قابلة للتغيير بالأنواع
HashMap<String, f64> - اقرأ الإدخال الأول باعتباره اسم المنتج الأول
- اقرأ الإدخال الثاني وحوّله إلى
f64ليكون سعر المنتج الأول - أدرج المنتج الأول وسعره في خريطة التجزئة باستخدام
.clone()على اسم المنتج - اقرأ الإدخال الثالث باعتباره اسم المنتج الثاني
- أدرج المنتج الثاني بسعر
0.0باستخدام.clone()على اسم المنتج - أدرج المنتج الثاني مرة أخرى بسعر
15.99باستخدام.clone()(سيؤدي ذلك إلى الكتابة فوق القيمة السابقة) - اطبع المعلومات الخاصة بالمنتجين بالتنسيق الدقيق الموضح أدناه
الإدخال:
- السطر الأول: اسم المنتج الأول (مثلًا،
Laptop) - السطر الثاني: سعر المنتج الأول كعدد عشري (مثلًا،
999.99) - السطر الثالث: اسم المنتج الثاني (مثلًا،
Mouse)
الإخراج:
- السطر الأول:
Inserted [first_product] at $[price] - السطر الثاني:
Inserted [second_product] at $0.00 - السطر الثالث:
Updated [second_product] to $15.99
جرّب بنفسك
use std::collections::HashMap;
use std::io;
fn main() {
// اقرأ المدخلات
let mut product1 = String::new();
io::stdin().read_line(&mut product1).expect("Failed to read line");
let product1 = product1.trim().to_string();
let mut price1_input = String::new();
io::stdin().read_line(&mut price1_input).expect("Failed to read line");
let price1: f64 = price1_input.trim().parse().expect("Failed to parse price");
let mut product2 = String::new();
io::stdin().read_line(&mut product2).expect("Failed to read line");
let product2 = product2.trim().to_string();
// TODO: اكتب الكود الخاص بك أدناه
// أنشئ mutable HashMap، أدرج المنتجات، واطبع المخرجات المطلوبة
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفّق التنفيذ
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 عبر الإنترنت