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

إدراج أزواج (المفتاح والقيمة)

جزء من قسم المنطق وتدفّق التنفيذ في رحلة 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() مفيدًا لإضافة إدخالات جديدة وتحديث الإدخالات الموجودة في خريطة التجزئة.

challenge icon

التحدي

سهل

ستتلقى ثلاثة مدخلات: اسم منتج، وسعره (كعدد عشري)، واسم منتج آخر. أنشئ خريطة تجزئة قابلة للتغيير لتخزين أسماء المنتجات كمفاتيح (من النوع 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، أدرج المنتجات، واطبع المخرجات المطلوبة
    
}
quiz iconاختبر نفسك

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

جميع دروس المنطق وتدفّق التنفيذ

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