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

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

swift

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

let array = [100, 200, 300 , 400 , 500, 100]  // Prints [100, 200, 300, 400, 500, 100]
var newArray: [Int] = []

for value in array {
    if (newArray.contains(value)) {
        continue
    }
    newArray.append(value)
}

print(newArray)
// Prints [100, 200, 300, 400, 500]

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

extension Array where Element: Hashable {
    
    func removeDuplicateElement() -> [Element] {
        var elementSet = Set()

        return filter {
            elementSet.update(with: $0) == nil
        }
    }
}

let array = [100, 200, 300 , 400 , 500, 100]
let newArray = array.removeDuplicateElement()

print(newArray)
// Prints [100, 200, 300, 400, 500]

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

發表迴響