避免 Swift 数组中的重复项

切萨雷

我创建了这个单例来访问整个应用程序中的共享数组:

class TranslationItems {
    var delegate: TranslationItemsDelegate?

    static let shared = TranslationItems()

    var array = [Translation]() {
        didSet {
            delegate?.newItemAdded()
        }
    }
}

问题是这允许重复(数组可能包含多个具有相同 hashValue 的项目)。如果我检查didSetsetter 中的重复,然后在那里更改数组(例如通过执行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是不必要的昂贵。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Swift:如何避免在CoreData中重复条目以实现JSON数组?

来自分类Dev

避免数组中的重复

来自分类Dev

尝试避免将重复项推入数组Angular中

来自分类Dev

如何避免将重复项推入数组

来自分类Dev

Swift避免在初始化器中重复代码

来自分类Dev

从swift 3中的多维数组中删除重复项

来自分类Dev

如何避免在MySQL中插入重复项?

来自分类Dev

如何避免arangoDB中的重复项

来自分类Dev

从自定义对象数组中删除重复项Swift

来自分类Dev

Swift 2计数数组中的重复项

来自分类Dev

Swift 2计数数组中的重复项

来自分类Dev

Swift 3.0删除字典数组中的重复项

来自分类Dev

似乎无法避免在Swift中强制展开

来自分类Dev

发布AWS Amplify GraphQL突变时如何避免在数组中创建重复项

来自分类Dev

在Swift中使用arc4random避免重复

来自分类Dev

避免在LINQ中重复

来自分类Dev

避免在Maven中重复

来自分类Dev

避免在MySql中重复。

来自分类Dev

避免在LINQ中重复

来自分类Dev

避免在MySql中重复。

来自分类Dev

在 SELECT 中避免重复

来自分类Dev

使用JPA避免结果列表中的重复项

来自分类Dev

避免分层父子关系集合中的重复项

来自分类Dev

合并迭代器以避免python中的重复项

来自分类Dev

如何通过使用linq避免下拉列表中的重复项?

来自分类Dev

如何避免在数组数组中重复值?

来自分类Dev

如何避免在Swift2中嵌套do / catch语句

来自分类Dev

为什么在Swift中需要避免使用C风格的/*...*/注释?

来自分类Dev

如何避免在Swift的UIViewController中再次编写相同的代码?