2017-03-22 27 views
1

私は2つのリストの共通部分を見つけることに慣れていますが、tclで2つのリストの和集合を見つけたいと思いました(重複を排除しながら)。私はこのコードの作業コピーを持っていますが、どの種類/数のリストでも十分に堅牢であるとは確信していませんので、より良い解決策を探しています。tclで2つのリストの和集合を見つける方法は?

ご意見やご感想をお寄せください。

答えて

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はSergeiの答えとほぼ同じように 'union'を実装しています。 –

+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

リストを反復することなく、リストの要素をキーとして辞書に入れ替える方法はありますか? –

関連する問題