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

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

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

How to merge maps in Golang and avoid duplicate values?

دمج الخرائط في Golang

يعد الجمع بين خرائط متعددة في خريطة واحدة مدمجة في Golang مهمة شائعة. لنفترض أن لديك ثلاث خرائط:

  • map1 = {"id": "id_1"، "val": "val_1"}
  • map2 = {"id": "id_2" , "val": "val_2"}
  • map3 = {"id": "id_1", "val": "val_3"}

الهدف هو دمج هذه الخرائط بناءً على مفتاح المعرف، مما يؤدي إلى:

  • result_map = {"id": "id_1"، "val": {"val_1"، "val_3"}، "id": "id_2"، var: {"val_2"}}

دمج بسيط

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

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)
الإخراج:

خريطة[id_1:[val_1 val_3] id_2:[val_2]]
            
أحدث البرنامج التعليمي أكثر>

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

Copyright© 2022 湘ICP备2022001581号-3