ios - 从 Swift 数组中删除具有重复属性的对象

标签 ios swift

这里的问题涉及从数组中删除重复的对象:

Removing duplicate elements from an array in Swift

相反,我需要删除本身不重复但具有特定重复属性(例如id)的对象。


我有一个包含我的 Post 对象的数组。每个 Post 都有一个 id 属性。

有没有比在我的数组中查找重复的帖子 ID 更有效的方法

for post1 in posts {
    for post2 in posts {
        if post1.id == post2.id {
            posts.removeObject(post2)
        }
    }
}

最佳答案

我将提出 2 种解决方案。

这两种方法都需要 PostHashable 和 Equatable

使 Post 符合 Hashable 和 Equatable

这里我假设您的 Post 结构(或类)有一个类型为 Stringid 属性。

struct Post: Hashable, Equatable {
    let id: String
    var hashValue: Int { get { return id.hashValue } }
}

func ==(left:Post, right:Post) -> Bool {
    return left.id == right.id
}

方案一(丢失原来的顺序)

要删除重复项,您可以使用 Set

let uniquePosts = Array(Set(posts))

方案2(保留顺序)

var alreadyThere = Set<Post>()
let uniquePosts = posts.flatMap { (post) -> Post? in
    guard !alreadyThere.contains(post) else { return nil }
    alreadyThere.insert(post)
    return post
}

关于ios - 从 Swift 数组中删除具有重复属性的对象,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49392603/

相关文章:

ios - 安装发布和调试 iOS

ios - SFAuthenticationSession 外观

iphone - 我想跟踪谁通过 ios 访问网站的电话号码

iOS Swift Parse 此查询具有出色的网络连接。你必须等到它完成

ios - 点击 TableViewCell 时 UILabel 未按预期更新的行数

ios - 我正在尝试在 Swift 中添加 MDCCard 以使用 Material Components 获取 Material Card View。错误 : No such module 'MaterialComponents.MaterialCards'

ios - 如何遍历结构的静态常量?

arrays - 在 Parse.com 中获取、存储和访问自定义数据数组

ios - 在 Swift 中使用来自单独函数的变量

ios - 当前位置纬度和经度在 iOS 7 到 IOS 8 中的不同行为