Получение суммы массивов по имени - PullRequest
0 голосов
/ 17 марта 2019

я создаю персональное приложение для своей работы.Я хочу перечислить нуждающихся для каждой вещи, которую я делаю, чтобы я знал, что им понадобится на день в весе.

так скажем, у меня есть 3 разные вещи, которые я могу сделать

food 1 = sugar: 2, eggs: 4, cheese: 3
food 2 = sugar: 5, eggs: 4, brownSugar: 3
food 3 = flour: 2, eggs: 4, cheese: 3

так скажем, сегодня нужно сделать 2 партии еды 1, 3 партии еды 2 и 1 порцию еды 3.

это выдаст

Sugar: 19
Eggs: 24
Cheese: 9
brownSugar: 9
Flour: 2

Если кто-нибудь может указать мне вправильное направление в этом вопросе, и это было бы здорово. Я думал, что каждый продукт должен быть представлен в виде массива и попытаться добавить их значение каждого ингредиента по имени.

Ответы [ 3 ]

0 голосов
/ 17 марта 2019

Поскольку ваша еда в основном парами (ингредиент: количество), она в идеале будет представлена ​​в Словаре, где ключом является ваш ингредиент (сейчас используйте 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]

Здесь мы начинаем с пустой суммы ([:]) и объединяем в ней все продукты.

0 голосов
/ 17 марта 2019

function orderFood(food1count,food2count,food3count){
    var sugarCount = food1count*2+food2count*5;
    var eggCount = (food1count+food2count+food3count)*4;
    var flourCount = food3count*2;
    var cheeseCount = (food1count+food2count)*3;
    var brownSugarCount = food2count*3;
    console.log('sugar :'+sugarCount);
    console.log('egg :'+eggCount);
    console.log('flour :'+flourCount);
    console.log('cheese :'+cheeseCount);
}

orderFood(2,3,1);
0 голосов
/ 17 марта 2019

Вроде как:

var foodArray: [Foods] = []
// append all your foods in it when needed

func calculateAmount(foodChoices : [Foods]) -> (Sugar:Int, Eggs: Int, Cheese: Int) {

    var cheese = 0
    var sugar = 0
    var eggs = 0

    for g in foodChoices {
        if g.name == foodArray.name {
            cheese =+ g.cheese
            sugar =+ g.sugar
            eggs =+ g.eggs
        }
    }  
    return (Sugar, Eggs, Cheese)
}

Вам нужно будет создать структуру для вашей еды, а затем вы сможете работать с ней.Возможно, есть лучшие способы, но это самый быстрый, который я могу придумать

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...