在 Swift 中,我們如果要移除陣列中重複的元素怎麼辦呢?最簡單的方式就是使用 for 迴圈把 Array 從頭到尾跑一遍,再去檢查 Array 中是否包含此元素,若沒有此元素的話再新增至新的 Array 中。但以 Swift 來說,這實在不是很方便,因為 Swift 中有一個強大的 filter,可以快速將 Array 掃一遍,並且依你設定的條件生成一個新的陣列,所以如果我們要移除陣列中重複的元素,可以使用 filter 這個函式喔!
先來看看傳統的方法吧,先繞個迴圈,然後檢查是 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]
以上是兩種方式,供大家參考!