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

الوصول إلى القيم

جزء من قسم Logic & Flow في رحلة Rust على Coddy — الدرس 30 من 66.

بمجرد أن يكون لديك بيانات مخزنة في hash map الخاصة بك، ستحتاج إلى طريقة لاسترجاعها. تسمح لك الطريقة .get() بالبحث عن قيمة باستخدام مفتاحها:

let value = my_map.get("some_key");

ومع ذلك، هناك تفصيل مهم يجب فهمه: لا تعيد .get() القيمة مباشرة. بدلاً من ذلك، تعيد نوع Option — وهو نوع مدمج في لغة Rust يمثل إما "شيئاً ما" أو "لا شيء". هذا لأن المفتاح الذي تبحث عنه قد لا يكون موجوداً في الـ hash map.

عندما يكون المفتاح موجوداً، تُرجع الدالة .get() القيمة Some(&value) - لاحظ رمز &، مما يعني أنك تحصل على مرجع (reference) للقيمة، وليس القيمة نفسها. عندما لا يكون المفتاح موجوداً، فإنها تُرجع None:

match capitals.get("France") {
    Some(capital) => println!("The capital is {}", capital),
    None => println!("Country not found"),
}

قد تلاحظ أن ذراع المطابقة (match arm) يستخدم Some(capital) بدون وجود & صريح. هذا لأن Rust تتعامل تلقائيًا مع المرجع (reference) نيابة عنك في هذا السياق — لا يزال capital يحتفظ بمرجع للقيمة، لكنك لست بحاجة لكتابة & بشكل صريح في النمط. مطابقة الأنماط في Rust ذكية بما يكفي لتسمح لك باستخدام capital مباشرة، على سبيل المثال عند طباعته.

يمنع هذا التصميم برنامجك من الانهيار عندما تحاول الوصول إلى مفتاح غير موجود. فبدلاً من التسبب في حدوث خطأ، تجبرك لغة Rust على التعامل مع كلا الاحتمالين - العثور على القيمة أو عدم العثور عليها - مما يجعل الكود الخاص بك أكثر قوة وقابلية للتنبؤ.

challenge icon

التحدي

سهل

ستتلقى مدخلين: اسم دولة واسم عاصمة. قم بإنشاء hash map تخزن أسماء الدول كمفاتيح (من نوع String) وعواصمها كقيم (من نوع String). أدخل الدولة وعاصمتها في الـ hash map. بعد ذلك، ستتلقى مدخلاً ثالثاً يحتوي على اسم دولة أخرى للبحث عنها. استخدم طريقة .get() لاسترداد العاصمة لهذه الدولة وتعامل مع كلتا الحالتين: عندما تكون الدولة موجودة في الخريطة وعندما لا تكون موجودة.

ملاحظة: تعيد .get() نوع Option — إما Some(&value) (مرجع للقيمة) عندما يكون المفتاح موجوداً، أو None عندما لا يكون موجوداً. في ذراع match، يمكنك كتابة Some(capital) وسيقوم Rust تلقائياً بالتعامل مع المرجع نيابة عنك، لذا يمكنك استخدام capital مباشرة في جملة الطباعة الخاصة بك.

المتطلبات:

  • استورد HashMap من std::collections
  • أنشئ hash map قابلة للتعديل (mutable) بأنواع HashMap<String, String>
  • اقرأ المدخل الأول كاسم للدولة
  • اقرأ المدخل الثاني كاسم للعاصمة
  • أدخل الدولة والعاصمة في الـ hash map
  • اقرأ المدخل الثالث كالدولة المراد البحث عنها
  • استخدم .get() لاسترداد العاصمة للدولة المراد البحث عنها
  • استخدم match للتعامل مع الـ Option الذي تعيده .get()
  • إذا تم العثور على الدولة، اطبع: The capital of [country] is [capital]
  • إذا لم يتم العثور على الدولة، اطبع: [country] not found in the map

المدخلات:

  • السطر الأول: اسم الدولة المراد إدخالها (مثلاً، France)
  • السطر الثاني: اسم العاصمة (مثلاً، Paris)
  • السطر الثالث: اسم الدولة المراد البحث عنها (مثلاً، France أو Germany)

المخرجات:

  • إذا كانت الدولة المراد البحث عنها موجودة: The capital of [country] is [capital]
  • إذا كانت الدولة المراد البحث عنها غير موجودة: [country] not found in the map

جرّب بنفسك

use std::collections::HashMap;
use std::io;

fn main() {
    // قراءة اسم الدولة لإدراجه
    let mut country = String::new();
    io::stdin().read_line(&mut country).expect("Failed to read line");
    let country = country.trim().to_string();
    
    // قراءة اسم العاصمة
    let mut capital = String::new();
    io::stdin().read_line(&mut capital).expect("Failed to read line");
    let capital = capital.trim().to_string();
    
    // قراءة اسم الدولة للبحث عنها
    let mut lookup_country = String::new();
    io::stdin().read_line(&mut lookup_country).expect("Failed to read line");
    let lookup_country = lookup_country.trim().to_string();
    
    // TODO: اكتب كودك أدناه
    // قم بإنشاء HashMap، وأدرج الدولة والعاصمة، ثم ابحث عن الدولة
    
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow