2016-03-24 156 views
0

私はTCL remove an element from a listを見ましたが、それは私のためには機能しません。たとえば、いくつかのコード:リストのtclリストから値を除いた要素を削除します

set mylist [list {a b c} {d e f} {g h i}] 

これは私が起こるしたいものです。

set idx [lsearch $mylist "a"];  # or if "d", it should take out {d e f} instead. Likewise, if "g" it should take out {g h i} 
set mylist [lreplace $mylist $idx $idx] 
puts "$mylist" 

Output: 
{d e f} {g h i} 

は、これは実際に何が起こるかです:

Output: 
{a b c} {d e f} {g h i} 

私は$ IDXを置くと、それがで出てきます私が何を検索しても "-1"。私は堅い指数で要素を取り除くのは簡単だと知っていますが、私はそれを削除するためにリストの要素を検索できるプログラムが必要です。基本的には、削除したい要素のインデックスを検索するには、どうすればよいのですか?

EDIT:Nevermind。私はあなたの検索で*を使用する必要があることを理解しました。私はここにどこにもそれを見ていないので、私は私の元の質問を残しておきます、と私が見つけた解決策:

set label "a" 
set idx [lsearch $mylist $label*] 
set mylist [lreplace $mylist $idx $idx] 

Output: 
{d e f} {g h i} 
+0

それは、世界の多くで祝日です。物事は通常より少し遅いです。 –

+0

検索パターン '$ label *'は、指定されたラベルで始まる*要素だけを見つけることを意味します。 –

答えて

1

必ず各サブリストの最初の要素に検索用語をお探しですか?もしそうなら、あなたはそれぞれの要素の一部を検査するかを指定lsearchさん-indexオプションを使用することができます。

set mylist [list {a b c} {d e f} {g h i}] 
set label "a" 
set idx [lsearch -index 0 -exact $mylist $label] 
set mylist [lreplace $mylist $idx $idx] 
関連する問題