«Если рабочий хочет хорошо выполнять свою работу, он должен сначала заточить свои инструменты» — Конфуций, «Аналитики Конфуция. Лу Лингун»
титульная страница > программирование > Как объединить несколько карт в Golang, избегая при этом повторяющихся значений?

Как объединить несколько карт в Golang, избегая при этом повторяющихся значений?

Опубликовано 8 ноября 2024 г.
Просматривать:941

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

Объединение карт в Golang

Проблема:
Объедините несколько карт, сохранив значения, связанные с одним и тем же ключом, на всех картах.

Первоначальный подход:

Приведенный код пытается объединить карты путем итерации по каждой карте, добавляя значения в результирующую карту на основе совпадающих ключей. Однако этот подход не обрабатывает повторяющиеся значения в карте результатов.

Простое слияние:

Можно реализовать измененную функцию слияния для обработки дубликатов путем добавления значений к срезам. связанный с ключами в карте результатов.

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]]

Это демонстрирует слияние карт, сохраняя значения, связанные с одним и тем же ключом, и избегая дублирования.

Последний учебник Более>

Изучайте китайский

Отказ от ответственности: Все предоставленные ресурсы частично взяты из Интернета. В случае нарушения ваших авторских прав или других прав и интересов, пожалуйста, объясните подробные причины и предоставьте доказательства авторских прав или прав и интересов, а затем отправьте их по электронной почте: [email protected]. Мы сделаем это за вас как можно скорее.

Copyright© 2022 湘ICP备2022001581号-3