ลบ Element เฉพาะจาก Array Swift หลายวิธี ขึ้นอยู่กับความต้องการ
วิธีที่ 1: filter (สร้าง Array ใหม่ - Functional)
var array = ["a", "b", "c", "f"]
let filtered = array.filter { $0 != "f" }
print(filtered) // ["a", "b", "c"]
// Original array ไม่เปลี่ยน
วิธีที่ 2: remove(at:) - Mutate Array เดิม
var array = ["a", "b", "c", "f"]
if let index = array.firstIndex(of: "c") {
array.remove(at: index)
}
print(array) // ["a", "b", "f"]
วิธีที่ 3: removeAll(where:) - ลบหลายตัว (Swift 4.2+)
var array = [1, 2, 3, 4, 5, 6, 2, 3]
array.removeAll { $0 % 2 == 0 } // ลบเลขคู่
print(array) // [1, 3, 5, 3]
วิธีที่ 4: ลบหลาย Index พร้อมกัน (เรียงจากท้าย)
var array = ["a", "b", "c", "d", "e"]
let indicesToRemove = [1, 3] // Remove "b" และ "d"
for index in indicesToRemove.sorted(by: >) {
array.remove(at: index)
}
print(array) // ["a", "c", "e"]
Extension Helper
extension Array where Element: Equatable {
mutating func removeFirst(_ element: Element) {
if let index = firstIndex(of: element) { remove(at: index) }
}
mutating func removeAll(_ elements: [Element]) {
for element in elements { removeFirst(element) }
}
func removing(_ element: Element) -> [Element] {
return filter { $0 != element }
}
func removing(_ elements: [Element]) -> [Element] {
let set = Set(elements)
return filter { !set.contains($0) }
}
}
// ใช้งาน
var arr = [1,2,3,4,5]
arr.removeFirst(3) // [1,2,4,5]
arr.removeAll([1,5]) // [2,4]
let newArr = arr.removing(2) // [4] (Original ไม่เปลี่ยน)
Performance Comparison
| Method | Time | Space | Mutates |
|---|---|---|---|
| filter | O(n) | O(n) | No |
| remove(at:) | O(n) | O(1) | Yes |
| removeAll(where:) | O(n) | O(1) | Yes |
| Multiple remove(at:) | O(k×n) | O(1) | Yes |
สำหรับ Object/Struct (ไม่ใช่ Equatable)
struct User { let id: Int; let name: String }
var users = [User(id: 1, name: "A"), User(id: 2, name: "B"), User(id: 3, name: "C")]
// Filter by Property
users = users.filter { $0.id != 2 }
// Remove by Index
if let index = users.firstIndex(where: { $0.id == 2 }) {
users.remove(at: index)
}