HashMap<K, V>
الخريطة التجزيئية HashMap<K, V>
HashMap<K, V> تخزّن أزواج مفتاح-قيمة وتتيح بحثًا واسترجاعًا سريعَين تقريبًا بزمن ثابت O(1) في المتوسط.
HashMap من وحدة std::collections تربط كل مفتاح فريد بقيمة، بترتيب غير مضمون بين عناصرها (خلافًا لـ Vec). مفيدة جدًا لعمليات البحث المتكرّرة بمفتاح معروف، مثل عدّ تكرار الكلمات أو تخزين إعدادات باسمها.
الوصول لمفتاح غير موجود عبر [] يسبّب panic؛ لذا التابع .get() الذي يُعيد Option<&V> هو الطريق الآمن للبحث.
الصياغة
use std::collections::HashMap; let mut map: HashMap<K, V> = HashMap::new(); map.insert(key, value);
📄 مثال
use std::collections::HashMap;
let mut scores = HashMap::new();
scores.insert("سارة", 90);
scores.insert("علي", 85);
match scores.get("سارة") {
Some(score) => println!("النتيجة: {score}"),
None => println!("غير موجود"),
}
*scores.entry("علي").or_insert(0) += 5;أهم النقاط
| العنصر | الوظيفة |
|---|---|
| .insert(k, v) | إضافة زوج مفتاح-قيمة، أو استبدال القيمة إن كان المفتاح موجودًا |
| .get(&k) | بحث آمن يُعيد Option<&V> بدل panic عند الغياب |
| .entry(k).or_insert(v) | إدراج قيمة افتراضية فقط إن لم يوجد المفتاح، ثم إعادة مرجع قابل للتعديل |
| .remove(&k) | إزالة زوج مفتاح-قيمة وإعادة القيمة كـ Option |
💡 نصائح عملية
- استخدم .entry(key).or_insert(default) بدل match يدوي للتحقّق من وجود مفتاح ثم إدراج قيمة افتراضية
- المفاتيح يجب أن تنفّذ سمتَي Eq وHash — الأنواع الأساسية (أعداد، نصوص) تدعمهما مباشرة
⚠️ أخطاء شائعة
- استخدام [] للوصول لمفتاح قد يكون غير موجود — يسبّب panic بدل إعادة None كما مع .get()
- الاعتماد على ترتيب معيّن عند التكرار على HashMap — الترتيب غير مضمون ويختلف بين التشغيلات
خصائص ذات صلة
🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار RUST الكامل بالعربي.