Поскольку ваша еда в основном парами (ингредиент: количество), она в идеале будет представлена в Словаре, где ключом является ваш ингредиент (сейчас используйте String
, позже может быть любой Hashable
):
let food1 = ["sugar": 2, "eggs": 4, "cheese": 3]
let food2 = ["sugar": 5, "eggs": 4, "brownSugar": 3]
let food3 = ["flour": 2, "eggs": 4, "cheese": 3]
Это позволяет нам легко комбинировать их, используя Dictionary.merging(_, uniquingKeysWith:)
food1.merging(food2, uniquingKeysWith: +)
/// ["sugar": 7, "brownSugar": 3, "cheese": 3, "eggs": 8]
Здесь мы объединяем food1
с food2
и объединяем количество одинаковых ингредиентов путем суммирования.
И чтобы объединить список продуктов мы могли бы использовать reduce(into:, _)
[food1, food2, food3]
.reduce(into: [:]) { sum, food in
sum.merge(food, uniquingKeysWith: +)
}
/// ["sugar": 7, "brownSugar": 3, "cheese": 6, "flour": 2, "eggs": 12]
Здесь мы начинаем с пустой суммы ([:]
) и объединяем в ней все продукты.