Объединение данных из нескольких map
Условие
Напишите функцию, которая объединяет значения из нескольких map в одну.
Сигнатура
func mergeMaps(maps ...map[string]int) map[string]int
Требования
- Если ключ встречается в нескольких map, значения суммируются
- Возвращает новую map, не изменяя входные
Пример
m1 := map[string]int{"a": 1, "b": 2}
m2 := map[string]int{"b": 3, "c": 4}
m3 := map[string]int{"a": 5}
result := mergeMaps(m1, m2, m3)
// result = {"a": 6, "b": 5, "c": 4}
Комментарии (1)
Ответ сгенерирован нейросетью и может содержать ошибки
Объединение map
Задача: объединить несколько map, суммируя значения при совпадении ключей.
Алгоритм
- Создаем пустую результирующую map
- Для каждой входной map:
- Для каждой пары ключ-значение:
- Если ключ существует: добавляем значение
- Если ключа нет: устанавливаем значение
- Возвращаем результат
Реализация
Создаем map результатом. Итерируем по всем входным map. Для каждого ключа суммируем значения используя +=.
Cложность:
- Time: O(n) где n - всего элементов
- Space: O(m) где m - уникальные ключи
Особенности
- result[key] += value работает правильно даже если ключа нет (zero value = 0)
- Входные map не изменяются
- Порядок элементов в map не гарантирован
- Можно передать zero maps
Примеры
m1 = {a:1, b:2}
m2 = {b:3, c:4}
m3 = {a:5}
Шаг 1: result = {} Шаг 2: обрабатываем m1
- a: result[a] = 0 + 1 = 1
- b: result[b] = 0 + 2 = 2 result = {a:1, b:2} Шаг 3: обрабатываем m2
- b: result[b] = 2 + 3 = 5
- c: result[c] = 0 + 4 = 4 result = {a:1, b:5, c:4} Шаг 4: обрабатываем m3
- a: result[a] = 1 + 5 = 6 result = {a:6, b:5, c:4}
Варианты реализации
Вариант 1: простой (один проход) result := make(map[string]int)
for _, m := range maps {
for k, v := range m {
result[k] += v
}
}
Вариант 2: с предвыделением Перед созданием result подсчитываем уникальные ключи. Создаем map с нужной capacity. Получается быстрее для больших данных, медленнее для малых.
Вариант 3: с функцией слияния Передаем функцию как параметр для выбора стратегии:
- сумма
- максимум
- минимум
- last wins и т.д.
Обработка ошибок
Нет, функция не возвращает ошибку. Все операции валидны. Даже пустой список map дает пустой результат.