问题描述
我正在计算一个数组/字典中重复字典的数量,并返回一个包含重复ID字符串数量的数组。下面是我拥有的数组的示例。
struct item {
var id = [String:String]()
var name = [String:String]()
var price = [String:Int]()
}
array = [{ "id": "xxxx1","name": "prodName1","price": 15},"id": "xxxx2","name": "prodName2","price": 20}
"id": "xxxx1","price": 15}]
var numbered = [item.id:Int]
array.forEach{ (items) in
numbered[items] = numbered[items] ?? 0 + 1
}
我尝试跟随一个foreach计数器(带有一个结构),但是似乎无法正确设置它。我正在寻找这样的结果:
result = ["xxxx1": 2,"xxxx2": 1]
解决方法
您需要首先修复您的结构声明。然后使用您的结构元素创建一个数组。这将使您的生活更加轻松。然后,您可以简单地使用reduce来计算出现次数:
struct Item {
let id: String
let name: String
let price: Int
}
let array = [("xxxx1","prodName1",15),("xxxx2","prodName2",20),("xxxx1",15)].map(Item.init)
let result = array.reduce(into: [:]) { $0[$1.id,default: 0] += 1 }
result // ["xxxx2": 1,"xxxx1": 2]