Как найти что-то в словаре, не зная названия словаря - PullRequest
0 голосов
/ 29 ноября 2018

Я использую игровые площадки Swift «Шаблон Anwsers» Допустим, у меня есть:

Пусть яблоко = [«стоимость»: 10, «питание»: 5] Пусть банан = [«стоимость»: 15, «Питание»: 10]

Let choice = askForChoice (Опции: [«Apple», «Банан»])

Какой хороший и простой способ определить стоимость каждого фруктабез использования функции «если», потому что я могу сделать более 100 разных вещей.

1 Ответ

0 голосов
/ 30 ноября 2018
// A good, more object oriented way-

struct Fruit{

    var name: String
    var cost: Double
    var nutrition: Int
}


let fruitsDataHolder = [
    Fruit(name: "Apple", cost: 10.0, nutrition: 5),
    Fruit(name: "Banana", cost: 15.0, nutrition: 10)
]

func getFruitsCost(fruits: [Fruit]) -> Double{

    var totalCost = 0.0
    for fruit in fruits{ totalCost += fruit.cost }

    return totalCost
}


print(getFruitsCost(fruits: fruitsDataHolder)) // prints 25.0

Если вы настаиваете на этом с помощью словарей:

let fruitsDataHolder2 = [
    ["name": "Apple", "cost": 10.0, "nutrition": 5],
    ["name": "Banana", "cost": 15.0, "nutrition": 10]
]

func getFruitsCost2(fruits: [[String: Any]]) -> Double{

    var totalCost = 0.0

    for fruit in fruits{
        let cost = fruit["cost"] as! Double
        totalCost += cost
    }

    return totalCost
}

print(getFruitsCost2(fruits: fruitsDataHolder2)) // prints 25.0

Редактировать Вот как вы можете получить стоимость определенного фрукта, основываясь на его имени

Для первого пути -

func getFruitCost(fruitName: String, fruits: [Fruit]) -> Double?{

    // searching for the fruit
    for fruit in fruits{

        if fruit.name == fruitName{
            // found the fruit, returning his cost
            return fruit.cost
        }
    }
    // couldn't find that fruit
    return nil
}

Для второго пути -

func getFruitCost2(fruitName: String, fruits: [[String: Any]]) -> Double?{

    // searching for the fruit
    for fruit in fruits{
        let currentFruitName = fruit["name"] as! String

        if currentFruitName == fruitName{
            // found the fruit, returning his cost

            return fruit["cost"] as! Double
        }
    }

    // couldn't find that fruit
    return nil
}
...