如何计算对象数组中keyValues的总数

时间:2018-05-22 13:59:40

标签: ios arrays swift uitableview

我在CartDataModal结构中获得了字典数组

class CartDataModal: NSObject {
    static let shared_Inst = CartDataModal()
    var cartArrayDict = [[String:Any]]()
}

收到的数据格式如下

restmenu是在插入

之后
[
["ItemName": Cheese Burger, "ItemPrice": 50, "ItemQuant": "2"], 
["ItemName": Veg Burger, "ItemPrice": 30, "ItemQuant": 0], 
["ItemName": Chicken Burger, "ItemPrice": 50, "ItemQuant": 0], 
["ItemName": Veg & Crisp Burger, "ItemPrice": 45, "ItemQuant": 0], 
["ItemName": Maharaja Burger, "ItemPrice": 60, "ItemQuant": 0], 
["ItemName": Coke, "ItemPrice": 50, "ItemQuant": 0], 
["ItemName": Pepsi, "ItemPrice": 50, "ItemQuant": 0]
]

如何计算" ItemQuant"的关键值总数?

2 个答案:

答案 0 :(得分:3)

这是一种计算cartArrayDict中项目数量的方法,同时确保只包含"ItemName"的那些键。它使用数组的reduce()函数和字典的所需键,如果键不存在则使用nil合并运算符。

如何在字典数组中获取项目数(按键)

let count: Int = cartArrayDict.reduce(0) {
    $0 + ($1["ItemName"] != nil ? 1 : 0)
}
print(count) // Or do whatever you want with the value

如何获得总数量

以下是如何获得数量的总和,如评论中所述。

let totalQuantity: Int = cartArrayDict.reduce(0) {
    $0 + ($1["ItemQuant"] as? Int ?? 0)
}
print(totalQuantity) // Or do whatever you want with the value

如何获得某种商品的总价

我已将此作为一种功能提出。

func getTotalPrice(for name: String) -> Int {
    let totalPrice: Int = cartArrayDict.reduce(0) {
        $0 + ($1["ItemName"] == name ? $1["ItemPrice"] as? Int : 0)
    }
    return totalPrice
}

let totalPriceForCoke = getTotalPrice(for: "Coke")

请注意,这假设键"ItemName"的值为String类型。目前你的价值观不是字符串,我不知道为什么会这样。我建议更改为:"Coke"而不是Coke

答案 1 :(得分:1)

你有字典数组:

var cartArrayDict = [[String:Any]]()

您需要将cartArrayDict映射到ItemName的数组:

let itemNames: [String] = cartArrayDict.map( { $0["ItemName"] }) as? [String] 

要删除重复的值,只需将其传递到Set并重新转换为数组:

let itemNameArray = Array(Set(itemNames))

总的来说,您可以找到ItemNameArray:

    let cartArrayDict = [
        ["ItemName": "Cheese Burger", "ItemPrice": 50, "ItemQuant": "2"],
        ["ItemName": "Veg Burger", "ItemPrice": 30, "ItemQuant": 0],
        ["ItemName": "Chicken Burger", "ItemPrice": 50, "ItemQuant": 0],
        ["ItemName": "Veg & Crisp Burger", "ItemPrice": 45, "ItemQuant": 0],
        ["ItemName": "Coke", "ItemPrice": 60, "ItemQuant": 0],
        ["ItemName": "Coke", "ItemPrice": 50, "ItemQuant": 0],
        ["ItemName": "Pepsi", "ItemPrice": 50, "ItemQuant": 0]
    ]

    if let itemsArr = cartArrayDict.map( { $0["ItemName"] }) as? [String] {
        let itemNameArray = Array(Set(itemsArr))
        print(itemNameArray)
    }

    // Result: ["Veg Burger", "Chicken Burger", "Pepsi", "Cheese Burger", "Coke", "Veg & Crisp Burger"]