一尘不染

删除数组中的重复对象

swift

我有一个包含我的Post对象的数组。每个人Post都有id财产。

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

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

阅读 257

收藏
2020-07-07

共1个答案

一尘不染

我将建议2解决方案。

两种方法都必须PostHashable平等的

使帖子符合可哈希和平等

在这里,我假设您的Poststruct(或类)具有idtype 的属性String

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
}

解决方案1(丢失原始订单)

要删除重复的内容,您可以使用 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
}
2020-07-07