我应该如何使用swift字典数组来获取所有值



我的字典是这样的:

["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] }

最后一部分有点棘手,因为您使用字符串,但您可以使用flatMapreduce来汇总值

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)
}

最新更新