簡體   English   中英

比較兩個 Arrays 並刪除重復項 Swift

[英]Compare Two Arrays and Remove Duplicates Swift

我有兩個 arrays 並且我想創建一個新數組來比較兩者並刪除兩個重復實例。

我有一個定制的 object:

struct SubService: Identifiable, Hashable, Encodable {
   var id: String = UUID().uuidString
   var name: String
   var charge: String
   var price: Double
}

我的兩個 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)]

這是我正在尋找的結果:

let result: [SubService] = [SubService(name: "Men's Haircut", charge: "service", price: 10)]

我嘗試了以下方法,但它返回與array1相同的數組。 我假設是因為id

let filteredArray = Array(Set(array1).subtracting(array2))

打印語句:

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)]

任何幫助表示贊賞:)

重復使用您的項目,而不是為每個數組聲明創建新項目。

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]

當您在let array2 =...中重新定義array1的第二項時,您將創建一個新的UUID ,使其與眾不同。 您實際上可以在打印的值中看到這一點。

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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM