2017-03-22 39 views
1

我很熟悉查找兩個列表的交集,但是,我想在tcl中找到兩個列表的聯合(同時消除重複項)。我確實有這個代碼的工作副本,但我不確定它對於任何類型/數量的列表是否足夠健壯,因此正在尋找更好的解決方案。如何在tcl中找到兩個列表的聯合?

任何幫助或想法表示讚賞。

回答

6

如果你把列表作爲集,所以你不用擔心訂單,如果項目,你可以只排序列表加入:

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

謝謝!太棒了。 – stark

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" 
% 
+0

Tclx實現'union'幾乎完全像Sergei的答案。 –

+0

感謝@glennjackman。欣賞它!對於最終用戶,我認爲使用本地/捆綁的API /命令比嘗試重寫它更有意義。 – Sharad

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 

這個也沒有n的優勢根本無需進行排序,這對於大型輸入設備可以提供很大幫助。

+0

有沒有辦法將列表中的元素填充爲字典作爲鍵而不用遍歷列表? –