我的字典是这样的:
["Coke": ["1", "80"], "Appetizer": ["3", "70"], "Water": ["4", "70"],
"Noodle": ["2", "40"], "Pizza": ["7", "80"], "Steak": ["7", "60"]]
值是一个数组,它包括两个值
第一个数字是你订购的商品数量
第二个数字类似于小计
我只是想知道我应该如何获得第二个数字并保存到新变量中?
因为我需要添加所有数字来表示的总价
let dict = ["Coke": ["1", "80"], "Appetizer": ["3", "70"], "Water": ["4", "70"], "Noodle": ["2", "40"], "Pizza": ["7", "80"], "Steak": ["7", "60"]]
简短回答(直接针对您的问题(
var price = dict.values.reduce(0, { $0 + Double($1[0])! * Double($1[1])! }) // If you need only the price, remove the multiplier
print(price) //1630.0
答案很长
就像SO上一直建议的那样,您应该创建一个数据模型来保存您的信息。在这种情况下,它看起来像这样,
struct Bill {
var item: String
var amount: Int
var price: Double
}
// For the sake of the example i'll convert your dictionary into Price
var billArray: [Bill] = []
for (key, value) in dict {
billArray.append(Bill(item: key, amount: Int(value[0]) ?? 0, price: Double(value[1]) ?? 0))
}
// The actual solution that you apply to the price array
var totalBill = billArray.reduce(0, { $0 + Double($1.amount) * $1.price}) // If you need only the price, remove the multipler amount
print(totalBill) //1630.0
让我们命名我们的字典产品:
let products = ["Coke": ["1", "80"], "Appetizer": ["3", "70"], "Water": ["4", "70"],
"Noodle": ["2", "40"], "Pizza": ["7", "80"], "Steak": ["7", "60"]]
可以使用values方法提取值。
let productValues = products.values
此时productValues
类型为[[String]]
获取可以使用.map()
的第二个项目的数组
let secondItems = productsValues.map { $0[1] }
最后一部分有点棘手,因为您使用字符串,但您可以使用flatMap
和reduce
来汇总值
let result = secondItems.flatMap { Int($0) }.reduce(0, +)
您可以访问这样的字典:
dict["Coke"]
这将返回:
["1", "80"]
如果你想获得列表的第二个元素,你只需执行以下操作:
dict["Coke"][1]
此代码应能在中工作
let dict:[String:[String]] = ["Coke": ["1", "80"], "Appetizer": ["3", "70"], "Water": ["4", "70"], "Noodle": ["2", "40"], "Pizza": ["7", "80"], "Steak": ["7", "60"]]
if let val:String = dict["Coke"]?[1] {
print(val)
}