在不知道字典名称的情况下如何在字典中查找内容
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”中? 是的,这是可能的。你可以在网上阅读/观看一些教程,我不介绍它以上是关于在不知道字典名称的情况下如何在字典中查找内容的主要内容,如果未能解决你的问题,请参考以下文章