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

时间:2018-11-28 08:47:04

标签: arrays swift

我的字典是这样的:

pdo_sqlsrv

该值是一个数组,它包含两个值

第一个数字就像您订购了多少个物品

第二个数字就像小计

我只是想知道如何获取第二个数字并保存到新变量中?

因为我需要添加所有数字以代表总价格

4 个答案:

答案 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] }

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

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