أسلوب المجموعات في Go
جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 31 من 68.
لا تمتلك لغة Go هيكل بيانات مجموعة (set) مدمج كما هو الحال في العديد من لغات البرمجة الأخرى. ومع ذلك، فقد ابتكر مطورو Go حلاً أنيقاً باستخدام الخرائط (maps) لمحاكاة المجموعات، وقد أصبح هذا النمط شائعاً جداً لدرجة أنه يُعتبر من الأساليب الاصطلاحية (idiomatic) في لغة Go.
يستخدم أسلوب الـ set في لغة Go خريطة (map) حيث تهتم فقط بالمفاتيح (keys) وليس القيم (values). وبما أنك تحتاج إلى تخزين شيء ما كقيمة، يستخدم مبرمجو Go بنية فارغة (empty struct) struct{}. إليك النمط الأساسي:
var mySet map[string]struct{}يُعد الهيكل الفارغ struct{} مميزًا لأنه لا يشغل أي مساحة (صفر بايت) من الذاكرة. وهذا يجعله مثاليًا للمجموعات (sets) حيث تحتاج فقط إلى تتبع ما إذا كان العنصر موجودًا أم لا، دون إهدار الذاكرة في تخزين قيم لا معنى لها.
يعتمد هذا النهج على الخاصية الأساسية لمفاتيح الخريطة (map keys): يجب أن تكون فريدة. عندما تضيف عنصراً إلى مجموعتك (set)، فأنت في الواقع تضيف مفتاحاً إلى الخريطة. يتم فرض التفرد تلقائياً من خلال سلوك الخريطة، مما يمنحك دلالات المجموعة (set semantics) الحقيقية.
في الدروس القادمة، ستتعلم كيفية إنشاء المجموعات (sets) ومعالجتها والعمل معها باستخدام نمط Go الاصطلاحي هذا. تُستخدم هذه التقنية على نطاق واسع في قواعد أكواد Go لتتبع العناصر الفريدة، وتنفيذ الخوارزميات، وحل المشكلات التي تتطلب اختبار عضوية سريعاً.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
ورقة مرجعية
لا تمتلك لغة Go هيكل بيانات set (مجموعة) مدمج، ولكنها تستخدم الخرائط (maps) لمحاكاة المجموعات باستخدام النمط الاصطلاحي:
var mySet map[string]struct{}يتم استخدام الهيكل الفارغ struct{} كنوع للقيمة لأنه لا يستهلك أي بايتات من الذاكرة. يجب أن تكون مفاتيح الخريطة (Map keys) فريدة، مما يوفر تلقائياً دلالات المجموعة (set semantics) لتتبع العناصر الفريدة.
جرّب بنفسك
لا يتضمّن هذا الدرس تحدّيًا برمجيًا.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1تدفق التحكم المتقدم
جملة Switch مع `fallthrough`الخروج من الحلقات المتداخلةالاستمرار في حلقة محددةجملة `goto`ملخص - التحكم المتقدم في الحلقات2الـ Structs والميثودز (Methods)
تعريف الـ Methods على الـ Structsالـ Value Receiversالـ Pointer Receiversاختيار الـ Receiversالـ Methods مقابل الـ Functionsملخص - سلوك الـ Struct5تعمق في الـ Maps
Maps من نوع Structsالـ Pointers كقيم في الـ Mapsالتحقق من الـ Nil Mapsمقارنة الـ Mapsمراجعة - عداد تكرار الكلمات3الواجهات (الأساسيات)
ما هي الواجهة؟تعريف الواجهةتطبيق الواجهةاستخدام أنواع الواجهاتالواجهة الفارغةتأكيدات النوع (Type Assertions)تبديل النوع (Type Switch)ملخص - الأشكال والسلوكيات6أسلوب Go الاصطلاحي: المجموعات
أسلوب المجموعات في Goإنشاء مجموعةالإضافة إلى مجموعةالتحقق من العضوية في المجموعةالحذف من مجموعةالتكرار عبر عناصر المجموعةمراجعة - أسماء مستخدمين فريدة