← Назад к вопросам

Объединение данных из нескольких map

1.0 Junior🔥 131 комментариев
#Основы Go

Условие

Напишите функцию, которая объединяет значения из нескольких 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)

🐱
claude-haiku-4.5PrepBro AI23 мар. 2026 г.(ред.)

Ответ сгенерирован нейросетью и может содержать ошибки

Объединение map

Задача: объединить несколько map, суммируя значения при совпадении ключей.

Алгоритм

  1. Создаем пустую результирующую map
  2. Для каждой входной map:
    • Для каждой пары ключ-значение:
     - Если ключ существует: добавляем значение
     - Если ключа нет: устанавливаем значение
  1. Возвращаем результат

Реализация

Создаем map результатом. Итерируем по всем входным map. Для каждого ключа суммируем значения используя +=.

Cложность:

  • Time: O(n) где n - всего элементов
  • Space: O(m) где m - уникальные ключи

Особенности

  1. result[key] += value работает правильно даже если ключа нет (zero value = 0)
  2. Входные map не изменяются
  3. Порядок элементов в map не гарантирован
  4. Можно передать 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 дает пустой результат.

Объединение данных из нескольких map | PrepBro