القواميس (Hashes)

تعديل
نسخ الدرس
تحميل الدرس

القواميس (Hashes)

القواميس (تُسمى أيضاً Hash أو Dictionary) هي بنية بيانات تُخزّن أزواجاً من المفاتيح والقيم. بدلاً من الوصول إلى العناصر بالفهرس الرقمي كما في المصفوفات، تستخدم القواميس مفاتيح للوصول إلى القيم.

ما هو القاموس؟

القاموس يشبه قاموس اللغة: لكل كلمة (المفتاح) يوجد تعريف (القيمة).

إنشاء القواميس

الطريقة الأساسية: الأقواس المعقوفة

باستخدام Hash.new

المفاتيح الرمزية (Symbol Keys)

في روبي، الطريقة الأكثر شيوعاً هي استخدام الرموز (Symbols) كمفاتيح لأنها أسرع وأكفأ في الذاكرة.

الصيغة القديمة: السهم الكبير

الصيغة الحديثة (المفضلة): النقطتين بعد المفتاح

مقارنة الصيغتين

الصيغةالمثالالاستخدام
السهم الكبير:key => valueصالحة لأي نوع من المفاتيح
النقطتينkey: valueللرموز فقط، أكثر شيوعاً

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

باستخدام الأقواس المربعة

باستخدام fetch (مع قيمة افتراضية)

باستخدام dig للقواميس المتداخلة

إضافة وتعديل القيم

إضافة قيم جديدة

تعديل قيم موجودة

باستخدام store

دمج قواميس باستخدام merge

حذف القيم

delete - حذف مفتاح معين

delete_if - حذف بشرط

clear - حذف الكل

معلومات عن القاموس

الحصول على المفاتيح والقيم

التكرار على القواميس

each - المفتاح والقيمة معاً

الناتج:

each_key - المفاتيح فقط

الناتج:

each_value - القيم فقط

جدول ملخص: دوال القواميس الأساسية

الدالةالوصفالمثال
[]الوصول للقيمةhash[:key]
[]=تعيين قيمةhash[:key] = value
fetchالوصول مع قيمة افتراضيةhash.fetch(:key, default)
keysجميع المفاتيحhash.keys
valuesجميع القيمhash.values
key?هل المفتاح موجود؟hash.key?(:key)
value?هل القيمة موجودة؟hash.value?(val)
deleteحذف مفتاحhash.delete(:key)
mergeدمج قاموسينhash1.merge(hash2)
lengthعدد الأزواجhash.length
empty?هل فارغ؟hash.empty?
eachالتكرارhash.each { |k,v| ... }

أمثلة عملية

مثال 1: بيانات شخص

الناتج:

مثال 2: عدّاد الكلمات

الناتج:

مثال 3: قائمة الطلاب ودرجاتهم

الناتج:

مثال 4: إعدادات التطبيق

الناتج:

القواميس المتداخلة

يمكن أن تحتوي قيمة القاموس على قاموس آخر:

نصائح مهمة

  1. استخدم الرموز كمفاتيح - أسرع وأكفأ من النصوص
  2. استخدم الصيغة الحديثة - name: "أحمد" بدلاً من :name => "أحمد"
  3. استخدم fetch للقيم الافتراضية - بدلاً من التحقق اليدوي من nil
  4. استخدم dig للقواميس المتداخلة - يتجنب أخطاء nil
  5. استخدم Hash.new(0) للعدّادات - يوفر التحقق من الوجود

الفرق بين المصفوفات والقواميس

الخاصيةالمصفوفةالقاموس
الوصولبالفهرس الرقمي [0, 1, 2]بالمفتاح [:name, :age]
الترتيبمرتبة دائماًمرتبة (Ruby 1.9+)
الاستخدامقوائم متجانسةبيانات مُسمّاة
المثال[1, 2, 3]{a: 1, b: 2}

تمرين: إنشاء واستعلام قاموس شخص

حان وقت التطبيق! في محرر الشيفرة على اليسار:

المطلوب:

  1. أنشئ قاموساً person يحتوي على:
    • name بقيمة "فاطمة"
    • age بقيمة 30
    • city بقيمة "دبي"
    • skills بقيمة مصفوفة ["Ruby", "Python"]
  2. اطبع الاسم
  3. اطبع المدينة
  4. أضف مفتاحاً جديداً job بقيمة "مبرمجة"
  5. اطبع عدد المفاتيح في القاموس
  6. اطبع جميع المفاتيح باستخدام p
  7. تحقق هل المفتاح :email موجود واطبع النتيجة

تلميحات:

  • استخدم الصيغة الحديثة: key: value
  • للمصفوفة داخل القاموس: skills: ["Ruby", "Python"]
  • لإضافة مفتاح جديد: person[:job] = "مبرمجة"
  • لعدد المفاتيح: person.length أو person.keys.length

الناتج المتوقع:


تذكّر: القواميس مثالية لتخزين البيانات المُسمّاة، والرموز هي أفضل خيار للمفاتيح!