2017-03-22 4 views
1

Ich bin vertraut mit dem Finden der Schnittmenge von zwei Listen, aber ich wollte die Vereinigung von zwei Listen in tcl finden (während Duplikate zu beseitigen). Ich habe eine funktionierende Kopie dieses Codes, aber ich bin mir nicht sicher, ob es robust genug für irgendeine Art/Anzahl von Listen ist und suche daher nach einer besseren Lösung.Wie findet man die Vereinigung von zwei Listen in tcl?

Jede Hilfe oder Ideen sind willkommen.

Antwort

6

Wenn Sie behandeln Listen als Mengen, also sorgen Sie sich nicht um Ordnung wenn die Einzelteile, könnten Sie einfach die verbundene Liste sortieren:

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

Danke! Dies ist perfekt. – stark

3

tclx stellt eine Vereinigung Befehl:

% 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 implementiert "Union" fast genau wie Sergei's Antwort. –

+0

Danke für die Info @ glennjackman. Bin dankbar! Für einen Endbenutzer halte ich es für sinnvoll, einen nativen/gebündelten API/Befehl zu verwenden, anstatt ihn neu zu schreiben. – Sharad

3

Eine Möglichkeit, dass nicht Sortierung braucht ist Dictionary-Schlüssel als Sets zu verwenden:

% 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 

Dies hat den Vorteil der nicht n überhaupt zu sortieren, was bei großen Eingabesätzen sehr hilfreich sein kann.

+0

Gibt es eine Möglichkeit, die Elemente einer Liste in ein dict als Schlüssel zu stopfen, ohne die Liste zu durchlaufen? –

Verwandte Themen