独特的项目我有两个集合(它们恰好是数组,但它并不重要,我认为):L
和R
。他们都是排序的,现在我想比较他们。我想最终得到两个集合:一个用于包含不在另一个中的项目的每个输入数组。比较两个列表中每个
我可以从L
中取出第一项,然后搜索R
,如果没有匹配项,将它添加到我的“唯一”集合(Lu
)中。但这是非常低效的,而且我预计在不久的将来会有一些非常大的集合进行处理。
我虽然关于可能 “玩跳房子”:
第1步:取两个列表,
L
和R
,并比较每个列表(l :: L
和r :: R
)头:科1:如果
l
<r
,然后加l
到Lu
并递归,传入L
和r :: R
分支2:如果
l
>r
,再加入r
到Ru
和递归,传入l :: L
和R
科3:如果
l
=r
,然后递归,传递L
和R
第2步:返回
Lu
a第二Ru
我可以写这个功能,但我付出努力之前,我在想,如果一个函数已经存在,可以帮我这个忙。这似乎是一个不常见的情况,我总是宁愿使用现有的解决方案来滚动我自己的。
(另外,如果有一个更容易识别的名字为这个算法,我想知道它叫什么。)
更简洁,你可以这样做:'[1; 2; 3] - 设置[2; 3; 4]'。 'set'函数适用于任何序列(列表,数组等)。 – Daniel
很棒的发现!感谢你的分享! – Martin
哦,而不是自己折叠数组,你可以使用'[| 1; 2; 3; |] |> Set.ofArray' - 与seq和list一起工作的函数也存在。 – Martin