我很熟悉查找兩個列表的交集,但是,我想在tcl中找到兩個列表的聯合(同時消除重複項)。我確實有這個代碼的工作副本,但我不確定它對於任何類型/數量的列表是否足夠健壯,因此正在尋找更好的解決方案。如何在tcl中找到兩個列表的聯合?
任何幫助或想法表示讚賞。
我很熟悉查找兩個列表的交集,但是,我想在tcl中找到兩個列表的聯合(同時消除重複項)。我確實有這個代碼的工作副本,但我不確定它對於任何類型/數量的列表是否足夠健壯,因此正在尋找更好的解決方案。如何在tcl中找到兩個列表的聯合?
任何幫助或想法表示讚賞。
如果你把列表作爲集,所以你不用擔心訂單,如果項目,你可以只排序列表加入:
set union [lsort -unique [list {*}$list1 {*}$list2]]
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"
%
Tclx實現'union'幾乎完全像Sergei的答案。 –
感謝@glennjackman。欣賞它!對於最終用戶,我認爲使用本地/捆綁的API /命令比嘗試重寫它更有意義。 – Sharad
一個不需要排序的方法是使用字典鍵爲集:
% 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的優勢根本無需進行排序,這對於大型輸入設備可以提供很大幫助。
有沒有辦法將列表中的元素填充爲字典作爲鍵而不用遍歷列表? –
謝謝!太棒了。 – stark