我在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"的关键值总数?
答案 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"]