这里的问题涉及从数组中删除重复的对象:
相反,我需要删除本身不重复但具有特定重复属性(例如id
)的对象。
我有一个包含我的 Post
对象的数组。每个 Post
都有一个 id
属性。
有没有比在我的数组中查找重复的帖子 ID 更有效的方法
for post1 in posts {
for post2 in posts {
if post1.id == post2.id {
posts.removeObject(post2)
}
}
}
最佳答案
我将提出 2 种解决方案。
这两种方法都需要 Post
是 Hashable
和 Equatable
使 Post 符合 Hashable 和 Equatable
这里我假设您的 Post
结构(或类)有一个类型为 String
的 id
属性。
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/