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

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

جزء من قسم المنطق وتدفّق التنفيذ في رحلة Rust على Coddy. الدرس 30 من 66.

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

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

ومع ذلك، هناك تفصيل مهم يجب فهمه: لا تُرجع .get() القيمة مباشرةً. بل تُرجع نوع Option: وهو نوع مضمّن في Rust يمثّل إمّا «شيئًا» أو «لا شيء». ويرجع ذلك إلى أن المفتاح الذي تبحث عنه قد لا يكون موجودًا في خريطة التجزئة.

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

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

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

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

challenge icon

التحدي

سهل

ستتلقى مُدخلين: اسم country واسم capital city. أنشئ hash map يخزّن أسماء country كمفاتيح (من النوع String) وعواصمها كقيم (من النوع String). أدخل country وعاصمتها في hash map. بعد ذلك، ستتلقى مُدخلًا ثالثًا يتضمن اسم country آخر للبحث عنه. استخدم الطريقة .get() لاسترداد capital لهذا البلد وتعامل مع كلتا الحالتين: عندما يكون country موجودًا في map وعندما لا يكون موجودًا.

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

المتطلبات:

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

الإدخال:

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

الإخراج:

  • إذا كان country المطلوب البحث عنه موجودًا: The capital of [country] is [capital]
  • إذا لم يكن country المطلوب البحث عنه موجودًا: [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اختبر نفسك

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

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

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