私は2つのリストの共通部分を見つけることに慣れていますが、tclで2つのリストの和集合を見つけたいと思いました(重複を排除しながら)。私はこのコードの作業コピーを持っていますが、どの種類/数のリストでも十分に堅牢であるとは確信していませんので、より良い解決策を探しています。tclで2つのリストの和集合を見つける方法は?
ご意見やご感想をお寄せください。
私は2つのリストの共通部分を見つけることに慣れていますが、tclで2つのリストの和集合を見つけたいと思いました(重複を排除しながら)。私はこのコードの作業コピーを持っていますが、どの種類/数のリストでも十分に堅牢であるとは確信していませんので、より良い解決策を探しています。tclで2つのリストの和集合を見つける方法は?
ご意見やご感想をお寄せください。
あなたはセットとしてリストを扱う場合は、アイテム場合は、順序を心配していないので、あなただけの参加リストを並べ替えることができます:
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はSergeiの答えとほぼ同じように 'union'を実装しています。 –
@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