在两个整数列表中查找公共元素

时间:2014-02-01 16:10:05

标签: list delphi integer

我有两个integer列表:

alist  : TList<Integer>;   //  eg.   1,2,3,4,5,6,7,8,9
blist  : TList<Integer>;   //  e.g   1,2,3,4,5

Resultlist  : TList<Integer>;     

IgnoreList : TList<Integer>;   //  e,g,  1,2,3

在两个列表中查找公共元素的有效方法是什么,不包括忽略列表中的元素。由于我必须在许多项目上运行此过程,因此我需要一种有效且快速的方法来解决此问题。

Resultlist  should be 4,5 

2 个答案:

答案 0 :(得分:4)

我同意德米特里的观点。无论列表是否已排序,将列表转换为哈希集并在其中查找都会很快。

看看Delphi的TDictionary。 TDictionary交集是寻找共同元素的一种快捷方式。否则,

1)为列入黑名单的元素创建一个TDictionary。 2)创建一个TDictionary并插入alist中不存在于blacklist-dictionary中的元素。此操作很快,因为TDictionary已针对查找进行了优化。 3)最后,迭代blist的元素,只输出alist-dictionary中的元素。

答案 1 :(得分:-1)

你想要的是list comparison algorithm。你需要两个排序列表(确保先排序它们,如果它们还没有)和两个索引变量,将两个索引设置为0,并开始比较值,推进一个索引或另一个索引,如果它们不相等,或者两者都是它们的指数是。通过在找到不相等或相等的值时自定义算法的行为,您可以使用此操作做很多事情。你想要的是,当找到相等的值时,将值插入输出列表。