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/34709066/

相关文章:

ios - React Native 图像和声音无法在真实设备上播放

ios - iOS中有没有办法设置图像 "outline"的颜色?

ios - UIActivityViewController Gmail 共享扩展重复正文

ios - 为面向许多客户的项目交换 Xcode 内容的最佳方式是什么?

iphone - 任何好的 iOS 崩溃报告服务

IOS Swift 在屏幕尺寸改变时调整标签字体大小

ios - 什么 iOS pod 在 PrivateFrameworks/ScreenReaderCore.framework 中使用 SCRCException ?

ios - (Swift 3)我需要向用户发送通知以在特定时间打开应用程序。使用本地通知还是推送通知更好?

ios - 在 Xcode 中使用枚举编译 swift 文件时出现段错误 11

ios - 在 Mapbox iOS SDK 中将 map 移动到标记下