0Pricing
Zig Academy · درس

استخدام HashMap وAutoHashMap

تخزين أزواج المفتاح والقيمة من std

استخدام HashMap وAutoHashMap درس مجاني في Zig Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Zig Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Zig Academy 4 دروس في المجموع.

لماذا جدول التجزئة

يخزن جدول التجزئة أزواج المفتاح والقيمة ويبحث عنها في زمن شبه ثابت. ويوفر Zig واحدًا في المكتبة القياسية، لذلك نادرًا ما تكتب جدولك الخاص. 🗺️

ابدأ بـ AutoHashMap

يختار std.AutoHashMap التجزئة والمساواة تلقائيًا لأنواع المفاتيح الشائعة مثل الأعداد والتعدادات. امنحه نوع المفتاح ونوع القيمة.

const Map = std.AutoHashMap(u32, []const u8);

يحتاج إلى مخصّص ذاكرة

مثل حاويات النمو الأخرى، يستعير الجدول الذاكرة. مرّر مخصّص ذاكرة إلى init، وسينمو الجدول عند إضافة الإدخالات.

var map = std.AutoHashMap(u32, u32).init(allocator);
defer map.deinit();

الإدراج باستخدام put

تضيف put مفتاحًا أو تستبدل قيمته. وقد تخصص ذاكرة أثناء النمو، لذلك تُعيد اتحاد أخطاء، وتستخدم try.

try map.put(1, 100);

البحث باستخدام get

تُعيد get قيمة اختيارية: القيمة المخزنة إذا كان المفتاح موجودًا، أو null خلاف ذلك. ولا يحدث عطل عند غياب المفتاح.

const v = map.get(1); // ?u32

فك تغليف النتيجة

لأن get اختيارية، عالج حالة الغياب باستخدام orelse أو التقاط if قبل استخدام القيمة.

const v = map.get(1) orelse 0;

التحقق والإزالة

اطلب من contains إجابة بنعم أو لا، واستدعِ remove لحذف مفتاح. وتُعيد remove القيمة true إذا كان المفتاح موجودًا.

if (map.contains(1)) _ = map.remove(1);

عندما لا يستطيع Auto اتخاذ القرار

بالنسبة إلى مفاتيح مثل الشرائح، لن تُترجم التجزئة التلقائية. عندها تستخدم std.HashMap الأقل مستوى وتوفر سياقًا.

StringHashMap لمفاتيح النصوص

مفاتيح السلاسل النصية شائعة، ولذلك توفر std مساعدًا جاهزًا: إذ يعرف std.StringHashMap مسبقًا كيفية تجزئة []const u8.

var m = std.StringHashMap(i32).init(allocator);
try m.put("score", 42);

التكرار على الإدخالات

احصل على مكرّر واستخدم حلقة لزيارة كل زوج. ويكشف كل إدخال عن مؤشر إلى مفتاح ومؤشر إلى قيمة.

var it = map.iterator();
while (it.next()) |e| {
    std.debug.print("{d}={d}\n", .{ e.key_ptr.*, e.value_ptr.* });
}

نفّذ deinit للجدول دائمًا

يملك الجدول مخازنه الداخلية، ولذلك استدعِ deinit عند الانتهاء. وسيبلغ مخصّص الاختبار عن الخطأ إذا نسيت ذلك.

defer map.deinit();

تحقق سريع

تحتاج إلى جدول تجزئة مفاتيحه أعداد صحيحة. ما النوع القياسي الأنسب والأبسط؟

مراجعة

استخدم AutoHashMap للمفاتيح البسيطة وStringHashMap للنصوص. هيّئ الجدول بمخصّص ذاكرة، وأضف الأزواج واسترجعها، وكرّر عليها، ثم نفّذ deinit. 🎯

الأسئلة الشائعة

هل درس «استخدام HashMap وAutoHashMap» مجاني؟

نعم — نص درس «استخدام HashMap وAutoHashMap» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Zig Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Zig Academy 4 دروس في المجموع.

ماذا ستتعلم في «استخدام HashMap وAutoHashMap»؟

تخزين أزواج المفتاح والقيمة من std تتمرن على Zig Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Zig Academy؟

لا تُشترط خبرة سابقة. Zig Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.

كم من الوقت يستغرق درس «استخدام HashMap وAutoHashMap»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Zig Academy هذا؟

نعم. كل درس في Zig Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. مكدس عام من الصفر
  2. قائمة مترابطة أحادية الاتجاه
  3. استخدام HashMap وAutoHashMap
  4. المقارنة بين تحليل الأداء والأمان
← العودة إلى Zig Academy