如何在tcl中找到两个列表的并集?

时间:2017-03-22 15:10:46

标签: list tcl

我很熟悉找到两个列表的交集,但是,我想在tcl中找到两个列表的并集(同时消除重复)。我确实有这个代码的工作副本,但我不确定它对任何类型/数量的列表都足够强大,因此我正在寻找更好的解决方案。

感谢任何帮助或想法。

3 个答案:

答案 0 :(得分:6)

如果您将列表视为集合,那么您不必担心订购项目,您只需对连接列表进行排序:

set union [lsort -unique [list {*}$list1 {*}$list2]]

答案 1 :(得分:3)

Tclx提供了一个联合命令:

% info patchlevel
8.5.9
% set a [list a b c]
a b c
% set b [list a d e]
a d e
% package require Tclx
8.4
% union $a $b
a b c d e
% 
% union
wrong # args: should be "union lista listb"
%

答案 2 :(得分:3)

一种不需要排序的方法是使用字典键作为集合:

% set a [list a b c]
a b c
% set b [list a d e]
a d e
% set d {}
% foreach k $a { dict set d $k . }
% foreach k $b { dict set d $k . }
% set c [dict keys $d]
a b c d e

这样做的好处是根本不需要排序,这对于大型输入集可以提供很多帮助。