我有两个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
答案 0 :(得分:4)
我同意德米特里的观点。无论列表是否已排序,将列表转换为哈希集并在其中查找都会很快。
看看Delphi的TDictionary。 TDictionary交集是寻找共同元素的一种快捷方式。否则,
1)为列入黑名单的元素创建一个TDictionary。 2)创建一个TDictionary并插入alist中不存在于blacklist-dictionary中的元素。此操作很快,因为TDictionary已针对查找进行了优化。 3)最后,迭代blist的元素,只输出alist-dictionary中的元素。
答案 1 :(得分:-1)
你想要的是list comparison algorithm。你需要两个排序列表(确保先排序它们,如果它们还没有)和两个索引变量,将两个索引设置为0,并开始比较值,推进一个索引或另一个索引,如果它们不相等,或者两者都是它们的指数是。通过在找到不相等或相等的值时自定义算法的行为,您可以使用此操作做很多事情。你想要的是,当找到相等的值时,将值插入输出列表。