比较两个数据库,看看哪一个不在另一个数据库中

时间:2017-10-07 00:32:25

标签: swift realm

现在我有一个带有新名称的数据库。它被设置为像这样的对象:

class Users: Object {

    @objc dynamic var userID = ""
    @objc dynamic var username = ""
    @objc dynamic var inputDate = Date()

    override static func primaryKey() -> String? {
        return "userID"
    }
}

我有一个刷新按钮,当按下该按钮时,它将检索一个新的名称列表。检索新列表时,可能会删除某些名称。如何检测哪些userID已被删除?或者我应该将新列表保存为新对象,例如class Users2: Object {并比较这两个对象/数据库? - 任何提示?

1 个答案:

答案 0 :(得分:1)

这是一个涉及Swift 4 Set的

的高级解决方案

假设我们从两个人阵列开始,一个是现有数据,第二个是新数据,第一个数组中的一些人被删除了。

let array1 = ["Kirk", "Spock", "Bones", "Scotty"]
let array2 = ["Kirk",          "Bones", "Scotty"]

将数组转换为集合

let s1 = Set(array1)
let s2 = Set(array2)

然后找到哪些人被删除了我们在集合上使用Set操作.subtracting。

let removedPeopleSet = s1.subtracting(s2)
print(removedPeopleSet)

和结果

["Spock"]

这里有一个问题是集合是无序的,因此如果需要,您需要在转换为数组时进行排序。

这种技术可以直接用在你的对象上,因为它们是ObjC对象,并且符合使用Sets时所需的hashable / equatable。