"إذا أراد العامل أن يؤدي عمله بشكل جيد، فعليه أولاً أن يشحذ أدواته." - كونفوشيوس، "مختارات كونفوشيوس. لو لينجونج"
الصفحة الأمامية > برمجة > كيف يمكنني التحقق بكفاءة من وجود المفاتيح عبر خرائط Go المتعددة؟

كيف يمكنني التحقق بكفاءة من وجود المفاتيح عبر خرائط Go المتعددة؟

تم النشر بتاريخ 2024-12-22
تصفح:420

How Can I Efficiently Check for Key Existence Across Multiple Go Maps?

التحقق الفعال من وجود المفتاح في خرائط متعددة

في Go، من الشائع العمل مع الخرائط، وهي هياكل بيانات فعالة لاسترداد المفتاح -أزواج القيمة. ومع ذلك، يوضح الكود المقدم من المطور الحاجة إلى التحقق من وجود مفتاح في خريطتين منفصلتين. ويبقى السؤال ما إذا كان يمكن جعل هذه العملية أكثر إيجازًا.

كما هو موضح في الإجابة، فإن استخدام النموذج v, ok := m[k] الخاص في Go للتحقق من وجود المفتاح يقتصر على تعيينات ذات متغير واحد . ولذلك، فإن الجمع بين التحققين في واحد إذا كان الشرط باستخدام هذا النموذج غير ممكن.

ومع ذلك، هناك طرق بديلة لتحقيق الوظيفة المطلوبة:

  1. تعيين Tuple:
    إذا كان نوع قيمة الخريطة هو نوع واجهة ويمكنك التأكد من عدم استخدام القيمة الصفرية، فيمكنك إجراء تعيين Tuple باستخدام فهرسين التعبيرات:

    if v1, v2 := m1["aaa"], m2["aaa"]; v1 != nil && v2 != nil {
        // ...
    }
  2. وظيفة المساعدة: يمكن إنشاء وظيفة مساعدة لإجراء التحقق من وجود المفتاح في كلتا الخريطتين وإرجاع النتائج:

    func idx(m1, m2 خريطة[سلسلة]واجهة{}, سلسلة k) ( واجهة v1، v2 {}، ok1، ok2 منطقي) { v1, ok1 = m1[ك] v2، ok2 = م2[ك] يعود
    func idx(m1, m2 map[string]interface{}, k string) (
        v1, v2 interface{}, ok1, ok2 bool) {
    
        v1, ok1 = m1[k]
        v2, ok2 = m2[k]
        return
    }
    يمكن بعد ذلك استخدام هذه الوظيفة على النحو التالي:

    if v1, v2, ok1, ok2 := idx(m1, m2, "aaa"); موافق1 && موافق2 { // ...
    func idx(m1, m2 map[string]interface{}, k string) (
        v1, v2 interface{}, ok1, ok2 bool) {
    
        v1, ok1 = m1[k]
        v2, ok2 = m2[k]
        return
    }
تسمح هذه الأساليب بإجراء فحص موجز وفعال لوجود مفتاح في خرائط متعددة ضمن عبارة شرطية واحدة.

أحدث البرنامج التعليمي أكثر>

تنصل: جميع الموارد المقدمة هي جزئيًا من الإنترنت. إذا كان هناك أي انتهاك لحقوق الطبع والنشر الخاصة بك أو الحقوق والمصالح الأخرى، فيرجى توضيح الأسباب التفصيلية وتقديم دليل على حقوق الطبع والنشر أو الحقوق والمصالح ثم إرسالها إلى البريد الإلكتروني: [email protected]. سوف نتعامل مع الأمر لك في أقرب وقت ممكن.

Copyright© 2022 湘ICP备2022001581号-3