I am going to suggest 2 solutions.
Both approaches will need Post
to be Hashable
and Equatable
Conforming Post to Hashable and Equatable
Here I am assuming your Post
struct (or class) has an id
property of type 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
}
Solution 1 (losing the original order)
To remove duplicated you can use a Set
let uniquePosts = Array(Set(posts))
Solution 2 (preserving the order)
var alreadyThere = Set<Post>()
let uniquePosts = posts.flatMap { (post) -> Post? in
guard !alreadyThere.contains(post) else { return nil }
alreadyThere.insert(post)
return post
}
与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…