Swift中如何从两个数组提取未选中元素列表?
提取未选中人员列表(用于Realm批量删除)
需求明确:从allPeople数组中筛选出不在selectedPeople数组内的元素,得到未选中人员列表,后续用来从Realm数据库中删除对应数据。
基础实现方案
直接用Swift数组的filter和contains方法组合就能完成:
var allPeople = ["Wayne", "Bryan", "Peter", "Jack", "Mario", "David", "Clark", "John"] var selectedPeople = ["Peter", "Jack", "Mario", "David"] // 筛选未选中人员 let unselectedPeople = allPeople.filter { !selectedPeople.contains($0) } print(unselectedPeople) // 输出:["Wayne", "Bryan", "Clark", "John"]
性能优化方案
如果数组元素数量较多,建议把selectedPeople转换成Set——数组的contains是线性查找(时间复杂度O(n)),而Set的contains是哈希查找(时间复杂度O(1)),数据量大时能明显提升筛选效率:
// 先将选中列表转为Set let selectedSet = Set(selectedPeople) // 再执行筛选 let unselectedPeople = allPeople.filter { !selectedSet.contains($0) }
结合Realm的实际删除操作
假设你有一个Realm模型类Person,包含name属性,可通过未选中列表构建查询批量删除对应数据:
import RealmSwift // 定义Realm模型 class Person: Object { @Persisted var name: String } // 执行删除流程 let selectedSet = Set(selectedPeople) let unselectedNames = allPeople.filter { !selectedSet.contains($0) } do { let realm = try Realm() try realm.write { // 查询所有需要删除的Person对象 let peopleToDelete = realm.objects(Person.self).filter("name IN %@", unselectedNames) // 批量删除 realm.delete(peopleToDelete) } print("未选中人员已成功从Realm删除") } catch { print("删除失败:\(error.localizedDescription)") }
内容的提问来源于stack exchange,提问作者Zin Win Htet
相关产品推荐
相关产品推荐

