tcl/tkリファレンス-リスト操作lset


.
.
 
名前
lset-リストの要素を変更
構文
lset varName ?index...? newValue
説明
lsetコマンドはvarNameパラメータを受信し、varNameはリスト変数です.コマンドは0つ以上のindexを受信することができ、複数のindexは連続的に配列することができ、リスト形式で現れることができる.最終的にvarNameの要素として新しい値を受信します.indexがない場合、コマンド形式は次のとおりです.
lset varName newValue

または
lset varName {} newValue

この場合、変数varNameの値はnewValueに置き換えられます.
インデックスが1つしかない場合、lsetコマンドはvarNameをリストとして処理します.index番目の要素の位置を指摘しました(0はリストの最初の要素を指す).リストを解釈するとき、lsetはTclコマンド解釈器のかっこ、引用符、反スラッシュに関する処理規則に従うが、変数置換やコマンド置換は起こらない.コマンドはnewValueを使用して要素を置換した列表を構築する.この新しいリストは変数varNameに格納され、lsetコマンドもこの新しいリストを返す.
indexが負数または$varName要素以上の数である場合、エラーが発生します.
各indexの数値はコマンドstring indexと同じで、1つのindexと複数のindexをサポートします.
追加のindex変数がある場合、各変数はサブリストの要素を指定し、スクリプトがサブリストの要素を変更することを許可します.コマンド:
lset a 1 2 newValue

または
lset a {1 2} newValue

最初のサブリストの2番目の要素の代わりにnewValueを使用します.
index変数としては、0以上の整数で、対応するリストの長さより小さくなければなりません.つまり、lsetコマンドはリストのサイズを変更できません.上記の要件を満たさないとエラーが発生します.

以下の各例において、初期値xの値は以下のようになる.
set x [list [list a b c] [list d e f] [list g h i]]
      → {a b c} {d e f} {g h i}

コマンドは結果を返し、xの値を変更します.エラーが発生した場合、xの値は変更されません.
lset x {j k l}
      → j k l
lset x {} {j k l}
      → j k l
lset x 0 j
      → j {d e f} {g h i}
lset x 2 j
      → {a b c} {d e f} j
lset x end j
      → {a b c} {d e f} j
lset x end-1 j
      → {a b c} j {g h i}
lset x 2 1 j
      → {a b c} {d e f} {g j i}
lset x {2 1} j
      → {a b c} {d e f} {g j i}
lset x {2 3} j
      → list index out of range

以下の各例において、初期値xの値は以下のようになる.
set x [list [list [list a b] [list c d]] /
            [list [list e f] [list g h]]]
      → {{a b} {c d}} {{e f} {g h}}

コマンドは結果を返し、xの値を変更します.エラーが発生した場合、xの値は変更されません.
lset x 1 1 0 j
      → {{a b} {c d}} {{e f} {j h}}
lset x {1 1 0} j
      → {{a b} {c d}} {{e f} {j h}}