我熟悉两个列表的交集,但是,我希望在tcl中找到两个列表的联合(同时消除重复列表)。我确实有这段代码的工作副本,但我不确定它是否对任何类型/数量的列表都足够健壮,因此我正在寻找一个更好的解决方案。
任何帮助或想法都会受到欢迎。
发布于 2017-03-22 15:29:27
如果您将列表作为集合来处理,那么您就不必担心项目是否有序,只需对连接列表进行排序:
set union [lsort -unique [list {*}$list1 {*}$list2]]发布于 2017-03-22 18:15:30
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"
%发布于 2017-03-22 20:14:42
不需要排序的一种方法是使用字典键作为集合:
% 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这样做的优点是根本不需要排序,这对于大输入集有很大的帮助。
https://stackoverflow.com/questions/42955624
复制相似问题