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

كيفية دمج خرائط متعددة في Golang مع تجنب القيم المكررة؟

تم النشر بتاريخ 2024-11-08
تصفح:354

How to Merge Multiple Maps in Golang While Avoiding Duplicate Values?

دمج الخرائط في جولانج

المشكلة: دمج خرائط متعددة، والحفاظ على القيم المرتبطة بنفس المفتاح عبر الخرائط.

النهج الأولي:

يحاول الكود المقدم دمج الخرائط عن طريق التكرار على كل خريطة، وإضافة قيم إلى خريطة النتائج بناءً على المفاتيح المطابقة. ومع ذلك، فإن هذا الأسلوب لا يتعامل مع القيم المكررة داخل خريطة النتائج.

دمج بسيط:

يمكن تنفيذ وظيفة دمج منقحة للتعامل مع التكرارات عن طريق إلحاق القيم بالشرائح المرتبطة بالمفاتيح في خريطة النتائج.

func merge(ms ...map[string]string) map[string][]string {
    res := map[string][]string{}
    for _, m := range ms {
        for k, v := range m {
            res[k] = append(res[k], v)
        }
    }
    return res
}

تجنب التكرارات:

لتجنب التكرارات في خريطة النتائج، يمكن تعديل وظيفة الدمج للتحقق من القيم الموجودة قبل الإلحاق:

func merge(ms ...map[string]string) map[string][]string {
    res := map[string][]string{}
    for _, m := range ms {
    srcMap:
        for k, v := range m {
            // Check if (k,v) was added before:
            for _, v2 := range res[k] {
                if v == v2 {
                    continue srcMap
                }
            }
            res[k] = append(res[k], v)
        }
    }
    return res
}

الاختبار:

m1 := map[string]string{"id_1": "val_1"}
m2 := map[string]string{"id_2": "val_2", "id_1": "val_1"}
m3 := map[string]string{"id_1": "val_3"}

res := merge(m1, m2, m3)
fmt.Println(res)

الإخراج:

map[id_1:[val_1 val_3] id_2:[val_2]]
map[id_1:[val_1 val_3] id_2:[val_2]]
يوضح هذا الدمج الخرائط، والحفاظ على القيم المرتبطة بنفس المفتاح وتجنب التكرارات.

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

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

Copyright© 2022 湘ICP备2022001581号-3