迅捷-在数组中查找重复的字典

问题描述

我正在计算一个数组/字典中重复字典的数量,并返回一个包含重复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]

相关问答

依赖报错 idea导入项目后依赖报错,解决方案:https://blog....
错误1:代码生成器依赖和mybatis依赖冲突 启动项目时报错如下...
错误1:gradle项目控制台输出为乱码 # 解决方案:https://bl...
错误还原:在查询的过程中,传入的workType为0时,该条件不起...
报错如下,gcc版本太低 ^ server.c:5346:31: 错误:‘struct...