swift - 避免 Swift 数组中的重复
问题描述
我创建了这个单例来访问整个应用程序中的共享数组:
class TranslationItems {
var delegate: TranslationItemsDelegate?
static let shared = TranslationItems()
var array = [Translation]() {
didSet {
delegate?.newItemAdded()
}
}
}
问题是这允许重复(数组可能包含具有相同 hashValue 的多个项目)。如果我检查didSet
setter 中的重复项,然后更改那里的数组(例如通过 do array = Array(Set(array))
),这会导致无限循环。
如何删除班级中的重复项?
解决方案
如果你想避免重复,为什么不使用 Set (Translation
必须符合Hashable
)?
var set = Set<Translation>()
但是,如果要保持数组更有效的方法是添加add
过滤重复项的方法,则Translation
必须符合Equatable
func add(object: Translation) {
if !array.contains(object) {
array.append(object)
delegate?.newItemAdded()
}
}
Set
从中制作一个Array
然后将其转换回Array
是不必要的昂贵。
推荐阅读
- linux - 通过 USB 将网络流量镜像到以太网(linux\windows)?
- openssl - az keyvault 证书导入失败,“NoneType”对象没有属性“get_notBefore”
- android - GoogleMaps.animateCamera 使用 Firebase 实时数据库代码崩溃
- form-recognizer - StartRecognizeCustomFormsFromUri 返回“参数 'Source' 不是有效的 Uri。” 用于文件 URI
- python-3.x - 使用多线程python3加速
- c# - 在 Asp.Net 中无法检测到按钮单击
- azure - Azure 替换管道发布任务中 Asp.net MVC 的服务模型端点的令牌
- python - 当两个表与“主”表不匹配时自动通知 Python 脚本
- php - Laravel - 身份验证,未记录路由
- python - csv中第一位数字频率,无导入