我的字典是这样的:
pdo_sqlsrv
该值是一个数组,它包含两个值
第一个数字就像您订购了多少个物品
第二个数字就像小计
我只是想知道如何获取第二个数字并保存到新变量中?
因为我需要添加所有数字以代表总价格
答案 0 :(得分:4)
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
答案 1 :(得分:1)
我们将其命名为词典产品:
let products = ["Coke": ["1", "80"], "Appetizer": ["3", "70"], "Water": ["4", "70"],
"Noodle": ["2", "40"], "Pizza": ["7", "80"], "Steak": ["7", "60"]]
您可以使用值方法提取值。
let productValues = products.values
此时productValues
类型为[[String]]
获取可以使用.map()
的第二项的数组
let secondItems = productsValues.map { $0[1] }
最后一部分比较棘手,因为您使用字符串,但是可以使用flatMap
和reduce
来汇总值
let result = secondItems.flatMap { Int($0) }.reduce(0, +)
答案 2 :(得分:0)
您可以像这样访问字典:
dict["Coke"]
这将返回:
["1", "80"]
如果要获取列表的第二个元素,只需执行以下操作:
dict["Coke"][1]
答案 3 :(得分:0)
此代码应该有效
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)
}