当前位置: 首页 > 面试题库 >

删除数组中的重复对象

方祺
2023-03-14
问题内容

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

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

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

问题答案:

我将建议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
}


 类似资料:
  • 问题内容: 我有一个看起来像这样的数组: 而且我需要删除重复项,以便保留类似以下内容: 我尝试安装underscore.js并使用._uniq,但这似乎仅在对象中出现一对时才起作用。我似乎无法使它跨多个键工作。 当我尝试类似的东西: 我只得到前三个唯一值(每个年级一个)。但是我需要所有年级和领域的唯一值。是否有一种简单的方法将两个键都馈给_.uniq函数? 最终,我需要一个列表,其中每个唯一的等级

  • 问题内容: 我有一个包含对象数组的对象。 我想知道什么是从数组中删除重复对象的最佳方法。举例来说,事物……东西将变成…… 问题答案: 一种原始方法是:

  • 假设我有这样的对象数组: 如何从每个对象中删除时间和单词属性?我的输出应该是这样的:

  • 假设对象数组如下所示: 如果标签和颜色相同,则会出现重复条目。在这种情况下,id=1和id=5的对象是重复的。 根据注释中的请求,这里是期望的结果:

  • 我想删除double[]数组中的重复项。不幸的是,我不能使用ArrayList或其他任何东西,它必须是“普通”双数组。我试图使用类数组的binarySearch()方法,但找不到一个很好的解决方案,因为我不仅要搜索,还要删除重复项。那么,每次删除这样的副本时,我都必须缩短长度。 这个问题有什么解决办法吗?

  • 问题内容: 我使用下面的代码行遍历数据库中的一个表: 如果我打印出数组: 我会得到这个: 但是我想摆脱数组中的重复项,所以我使用 我得到下面的奇怪结果,这不是我想要的结果: 理想情况下,我认为它应该返回以下内容: 我该怎么做才能正确处理?我使用了错误的PHP语法/默认功能吗? 问题答案: 该功能将为您完成此操作。您只需要添加标志: