swift 3 - 从另一个数组中存在的数组中删除对象
Posted
技术标签:
【中文标题】swift 3 - 从另一个数组中存在的数组中删除对象【英文标题】:swift 3 - remove objects from array that exist in another array 【发布时间】:2016-12-09 22:55:48 【问题描述】:我有一个里面有联系人对象的数组。
然后我有另一个用户数组。
class Contact: NSObject
var name: String?
var phoneNumber: String?
var phoneNumberFormatted: String?
init(name: String, phoneNumber: String?, phoneNumberFormatted: String)
self.name = name
self.phoneNumber = phoneNumber
self.phoneNumberFormatted = phoneNumberFormatted
class User: NSObject
var name: String?
如果我的 [User]
中有一个名称匹配的用户,我如何从 [Contact]
中删除联系人对象?
我知道如何通过循环来做到这一点,但最有效的方法是什么?
【问题讨论】:
我将 phoneNumber 对象名称更改为 Contact。感谢您的帮助@AlexanderMomchliov @Walker 有什么理由让它成为 NSObject 吗?否则你不应该。此外,如果字段是必需的,您应该使用 let,使其非可选并为属性添加必需的初始化程序 如果你不打算让你的类 NSCoding 兼容,你不需要继承 NSObject 你在用 Swift 编码,不需要子类 NSObject 除非你有特定的原因(表现得像 NSObject) 如果你需要一个实例,你可以看看这个答案***.com/a/37983027/2303865 【参考方案1】:对非平凡数组大小执行此操作的最佳(计算效率最高)方法是从需要重复搜索的数组中预先计算一个集合,并过滤其他数组,仅在未在其中找到元素时才保留元素集合。
这利用了Set
的O(1)
查找性能。算法整体为O(userPhoneNumbers.count + contacts.count)
let userPhoneNumbers = Set(users.lazy.map $0.phoneNumber )
let filteredContacts = self.contacts.filter !userPhoneNumbers.contains($0.phoneNumber)
【讨论】:
Alex,我正在尝试按两个数组中的对象都具有的属性进行过滤。答案对我来说不是很清楚。脑洞扩大一点?谢谢大佬 你熟悉map/reduce/filter吗?以上是关于swift 3 - 从另一个数组中存在的数组中删除对象的主要内容,如果未能解决你的问题,请参考以下文章