查找存在于一个集合中而不是另一个集合中的元素

Nav*_*K N 1 algorithm set

我有两组 A 和 B。

A
--
1
2
6

B
--
1
2
3
4
Run Code Online (Sandbox Code Playgroud)

当我将集合 A 与 B 进行比较时,当集合 B 与 A 进行比较时,我需要将值 6 作为输出,将值 4 作为输出。

我想知道什么是最好的算法来做到这一点?我写了一个,但它有二次复杂性。它基本上迭代一组并在循环内迭代第二组以检查值是否存在。我觉得这是低效的。

语境

我在 UI 中显示的数据库中有一组值。用户可以删除或添加新项目到列表中,然后按“保存更改”按钮,这会将所有更改保存到数据库中。所以这里我需要将新添加的项目插入数据库并删除删除的项目。

所以我传递了第一组,其中将包含新添加和已经存在的项目。我加载另一个集合,它将包含数据库中的所有项目。现在,如果我应用上述算法将 Set A(新列表)与 Set B(数据库列表)进行比较,并采用 SetA 中存在的项目而不是 SetB 中的项目,我将获得所有新添加的项目。然后将 SetB 与 SetA 进行比较,所有在 setB 中存在但在 SetA 中不存在的项目将被删除。我愿意接受关于更好算法的建议。

任何帮助都会很棒。

Joh*_*ooy 5

在 Python 中

>>> A=set((1,2,6))
>>> B=set((1,2,3,4))
>>> A-B
set([6])
>>> B-A
set([3, 4])
Run Code Online (Sandbox Code Playgroud)

假设您没有内置集类型
Psudocode:

# This computes the items of B that are not in A
a=hash(A)   # Hopefully you at least have some sort of hash type
result=[]   #empty list
for item in B:
    if item not in a:
        result.append(item)
Run Code Online (Sandbox Code Playgroud)