[Swift] 如何移除陣列中重複的元素?

在 Swift 中,我們如果要移除陣列中重複的元素怎麼辦呢?最簡單的方式就是使用 for 迴圈把 Array 從頭到尾跑一遍,再去檢查 Array 中是否包含此元素,若沒有此元素的話再新增至新的 Array 中。但以 Swift 來說,這實在不是很方便,因為 Swift 中有一個強大的 filter,可以快速將 Array 掃一遍,並且依你設定的條件生成一個新的陣列,所以如果我們要移除陣列中重複的元素,可以使用 filter 這個函式喔!

 

swift

 

先來看看傳統的方法吧,先繞個迴圈,然後檢查是 array 中是不是包含該元素,若是的話就略過,不是的話新增至新的陣列中

  1. let array = [100, 200, 300 , 400 , 500, 100]  // Prints [100, 200, 300, 400, 500, 100]
  2. var newArray: [Int] = []
  3.  
  4. for value in array {
  5.     if (newArray.contains(value)) {
  6.         continue
  7.     }
  8.     newArray.append(value)
  9. }
  10.  
  11. print(newArray)
  12. // Prints [100, 200, 300, 400, 500]

 

 

接下來來看精簡版,使用 filter ([Swift] Array 陣列快速過濾函式 filter 的使用教學),而在「removeDuplicateElement」函式中,調用了 Set 來判斷元素是否已加入了陣列中,Set 中有一個 update 來更新元素,若元素不存在 Set 中,呼叫 update 函式後會回傳 nil,也因此我們只要篩出 update 回傳是 nil 的元素就好囉

  1. extension Array where Element: Hashable {
  2.  
  3.     func removeDuplicateElement() -> [Element] {
  4.         var elementSet = Set()
  5.  
  6.         return filter {
  7.             elementSet.update(with: $0) == nil
  8.         }
  9.     }
  10. }
  11.  
  12. let array = [100, 200, 300 , 400 , 500, 100]
  13. let newArray = array.removeDuplicateElement()
  14.  
  15. print(newArray)
  16. // Prints [100, 200, 300, 400, 500]

以上是兩種方式,供大家參考!