如何删除数组中的重复对象?

时间:2019-01-30 20:41:05

标签: ios arrays swift

我有一个VC,在其中仅获取对象数组中第一个对象的数据。因此,我只提取arrayOfObjects[0],然后在输入第二个VC时需要提取与同一数组中其他对象关联的所有其他数据。但是后来我遇到了一个问题,我最终要再次获取已经拥有的第一部分数据。所以我的数组看起来像data1, data1, data2, data3 ...,这当然不是我想要的。

当前,我试图解决此问题的方法是执行以下操作:MainObject?.arrayOfSubObjects.remove(at: 0),但这意味着一开始它运行良好,但是每次我回到上一个VC,然后再返回我减去我想在那里的对象之一。所以我最终得到:data2, data3 ...

所以我的问题是如何从一开始就删除该多余的对象,但是在删除后不删除任何东西?

我尝试过的一些事情:

            if selectedPost?.media[0].videoURL != nil {
            if selectedPost?.media[0].videoURL == selectedPost?.media[1].videoURL {
                selectedPost?.media.remove(at: 0)
            } else {
                print("NO!!!!!! they are not the same ")
            }

        } else if selectedPost?.media[0].image != nil {
            if selectedPost?.media[0].image == selectedPost?.media[1].image {
                selectedPost?.media.remove(at: 0)
            } else {
                print("NO!!! they are not the same ")
            }

        }

但是这什么也没做,总是以其他方式结束。我也尝试过设置数字方案之类的事情,但这失败了,因为VC一直在重新加载

1 个答案:

答案 0 :(得分:0)

您可以尝试这样做:

guard let selectedPost = selectedPost else { return }
if selectedPost.media.contains(where: {$0.image == image}) { return } // Here the $0.image should be replaced with $0.mediaURL == mediaURL for the videos or however you videoURL is called in Media
selectedPost.media.append(Media(image: image, timeStamp: Double(timeStamp)))
self.tableView.reloadData()

尝试在您的Hashable类中符合Media

class Media : Hashable {


    var hashValue : Int {
        return image.hashValue
    }

    var image = UIImage()
    // .....

    static func == (lhs: Media, rhs: Media) -> Bool {
        return lhs.hashValue == rhs.hashValue
    }

}

然后,您可以将两个媒体对象与==进行比较,因此您可以执行类似于此答案顶部的操作。祝你好运