我很熟悉找到两个列表的交集,但是,我想在tcl中找到两个列表的并集(同时消除重复)。我确实有这个代码的工作副本,但我不确定它对任何类型/数量的列表都足够强大,因此我正在寻找更好的解决方案。
感谢任何帮助或想法。
答案 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
这样做的好处是根本不需要排序,这对于大型输入集可以提供很多帮助。