Как просуммировать значения в 2 словарях Swift

Даны два словаря, объедините их в один с названием tables. Если в обоих словарях будет один и тот же ключ, суммируйте значения. let table1 = ["box": 3, "lamp": 1, "pen": 2] let table2 = ["box": 2, "PC": 1, "pen": 3]


Ответы (2 шт):

Автор решения: NoX

Итак, у нас дано два словаря (цифры подставил разнообразнее и побольше, чтобы проверить ответы):

let table1 = ["box": 4, "lamp": 2, "mac": 50, "apple": 12, "pen": 8]
let table2 = ["PC": 3, "pen": 22, "apple": 6, "box": 10, "phone": 5]

Первое задание сделал так (просто добавляем ключ-значение второго словаря в первый, если их ещё в нём нет):

let tables = table1.merging(table2) { (_, new) in new }
print(tables.keys)

//На консоль выйдет ["mac", "box", "pen", "lamp", "phone", "PC", "apple"]
//Здесь стоит иметь ввиду, что со значениями (цифрами) никаких операций не 
производится!

Вторая задача, логика и решение такие:

  1. Создаём первый цикл, в котором узнаём ключ и значение из первого словаря

  2. Создаём второй цикл, в котором узнаём ключ и значение из второго словаря

  3. Сравниваем ключи. Если они равны, то складываем значения по этим ключам

     for (keyOne, valueOne) in table1  {
         for (keyTwo, valueTwo) in table2 {
             if keyOne == keyTwo {
                 let sum = valueOne + valueTwo
    
                 print(sum) //На консоль выйдут 14, 18, 30
             }
         }
     }
    
→ Ссылка
Автор решения: schmidt9

Задача может быть решена с помощью метода merging, его замыкание выполняет сложение, если ключи в словарях дублируются

let table1 = ["box": 3, "lamp": 1, "pen": 2] 
let table2 = ["box": 2, "PC": 1, "pen": 3]

var tables = table1.merging(table2) { v1, v2 in v1 + v2 }

print(tables)
→ Ссылка