在不知道字典名称的情况下如何在字典中查找内容

Posted

技术标签:

【中文标题】在不知道字典名称的情况下如何在字典中查找内容【英文标题】:How do you find something in a dictionary without knowing the name of the dictionary 【发布时间】:2018-11-29 19:59:23 【问题描述】:

我正在使用 Swift Playgrounds “Anwsers 模板” 假设我有:

设苹果 = [“成本”:10,“营养”:5] 设香蕉 = [“成本”:15,“营养”:10]

让选择 = askForChoice(Options:[“Apple”, “Banana”])

在不使用“if”函数的情况下,找到每种水果的成本有什么好的、简单的方法,因为我可能会做出 100 多种不同的东西。

【问题讨论】:

请复制粘贴真实代码并正确格式化。 为什么不为水果制作一个类(带有参数成本和营养),然后制作一个水果字典?例如为苹果、香蕉、..制作子类。 @rmaddy 为什么需要真正的代码? 请包含您迄今为止尝试过的代码。 SO 不是代码编写服务。您应该做出一些努力,然后在遇到特定问题时询问。 我通常不会包含整个代码,因为它很长,如果有人遇到问题,他们可能无法理解答案,因为它不适用于他们的项目。但我会包含整个代码。 【参考方案1】:
// 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

【讨论】:

如果我只希望用户只给出水果的名称而不是所有水果信息,它是否有效。 刚刚编辑过——这里是你如何用他的名字得到一个水果的成本 是否可以通过用户输入将新水果添加到“newFruitDataHolder”中? 是的,这是可能的。你可以在网上阅读/观看一些教程,我不介绍它

以上是关于在不知道字典名称的情况下如何在字典中查找内容的主要内容,如果未能解决你的问题,请参考以下文章

如何在不区分大小写的情况下执行 model.objects.get(**kwargs)

如何在不停止递归的情况下返回递归函数中的值?

‘dict’的神奇魔法

如何在不知道名称的情况下访问结构成员?

如何在不使用核心位置服务的情况下获取用户当前的城市名称?

如何在不知道子类名称的情况下访问 django 中对象的子类?