Проблема:
Объедините несколько карт, сохранив значения, связанные с одним и тем же ключом, на всех картах.
Первоначальный подход:
Приведенный код пытается объединить карты путем итерации по каждой карте, добавляя значения в результирующую карту на основе совпадающих ключей. Однако этот подход не обрабатывает повторяющиеся значения в карте результатов.
Простое слияние:
Можно реализовать измененную функцию слияния для обработки дубликатов путем добавления значений к срезам. связанный с ключами в карте результатов.
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