[英]Compare Two Arrays and Remove Duplicates Swift
I have two arrays and I would like to create a new array that compares the two and removes both instances of duplicates.我有两个 arrays 并且我想创建一个新数组来比较两者并删除两个重复实例。
I have a custom object:我有一个定制的 object:
struct SubService: Identifiable, Hashable, Encodable {
var id: String = UUID().uuidString
var name: String
var charge: String
var price: Double
}
My two arrays:我的两个 arrays:
let array1: [SubService] = [SubService(name: "Men's Haircut", charge: "service", price: 10), SubService(name: "Fade", charge: "service", price: 10)]
let array2: [SubService] = [SubService(name: "Fade", charge: "service", price: 10)]
Here is the result I'm looking for:这是我正在寻找的结果:
let result: [SubService] = [SubService(name: "Men's Haircut", charge: "service", price: 10)]
I have tried the following but it returns the same array as array1
.我尝试了以下方法,但它返回与
array1
相同的数组。 I'm assuming because of the id
?我假设是因为
id
?
let filteredArray = Array(Set(array1).subtracting(array2))
print statements:打印语句:
ARRAY 1: [SubService(id: "F9EDBBC0-3786-4718-B6BE-C31F26D6E0F0", name: "Fade", charge: "service", price: 10.0), SubService(id: "D91939DD-C339-4A56-B09D-C19ABA56A48B", name: "Men\'s Haircut", charge: "service", price: 10.0)]
ARRAY 2: [SubService(id: "373CE5F9-ECB0-4572-BD27-8BC71F96163B", name: "Fade", charge: "service", price: 10.0)]
FILTERED ARRAY: [SubService(id: "D91939DD-C339-4A56-B09D-C19ABA56A48B", name: "Men\'s Haircut", charge: "service", price: 10.0), SubService(id: "F9EDBBC0-3786-4718-B6BE-C31F26D6E0F0", name: "Fade", charge: "service", price: 10.0)]
Any help is appreciated:)任何帮助表示赞赏:)
Reuse your items instead of creating new ones for each array declaration.重复使用您的项目,而不是为每个数组声明创建新项目。
let mens = SubService(name: "Men's Haircut", charge: "service", price: 10)
let womens = SubService(name: "Woman's Haircut", charge: "service", price: 10)
let array1 = [mens, womens]
let array2 = [womens]
When you redefine the second item of array1
in let array2 =...
, you create a new UUID
that makes it different.当您在
let array2 =...
中重新定义array1
的第二项时,您将创建一个新的UUID
,使其与众不同。 You can actually see that in your printed values.您实际上可以在打印的值中看到这一点。
SubService has to conform to protocol Equatable SubService 必须符合 Equatable 协议
struct SubService: Identifiable, Hashable, Encodable, Equatable {
var id: String = UUID().uuidString
var name: String
var charge: String
var price: Double
static func ==(lhs: SubService, rhs: SubService) -> Bool {
return lhs.name == rhs.name
}
}
let arrSet = Set(array2)
let filteredArray = array1.filter{ !arrSet.contains($0) }
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.