tcl
Tcl 主要データ構造 早見表 (string, array, dict, list)
Tclにおける主要なデータ構造(文字列、連想配列、ディクショナリ、リスト)の主要操作まとめ。
文字列 (string)
Tclではすべてのデータが本質的に文字列として扱われる。
| 操作 | コマンド例 | 説明 |
|---|---|---|
| 長さ取得 | string length $str | 文字列の長さを返す |
| 切り出し | string range $str 0 4 | 指定範囲(インデックス0〜4)を抽出 |
| 検索 | string first "sub" $str | 部分文字列の最初の位置を返す(無ければ -1) |
| 比較 | string equal $str1 $str2 | 完全一致で 1、不一致で 0 を返す |
| 置換 | regsub "old" $str "new" result | 正規表現による置換 |
| トリム | string trim $str | 先頭と末尾の空白を削除 |
リスト (list)
空白で区切られた要素の集まり。
正確には、波括弧やバックスラッシュによって構造化され、空白を含む要素を安全に保持できるTcl固有のデータ形式。
他言語における「配列」や「可変長リスト」の実質的な役割を担う。
| 操作 | コマンド例 | 説明 |
|---|---|---|
| 初期化・生成 | set mylist [list apple banana cherry] | 要素を結合してリストを生成(波括弧 {apple banana cherry} も可) |
| 要素の追加 | lappend mylist date | リストの末尾に要素を追加(変数を直接書き換え) |
| 要素の取得 | set item [lindex $mylist 1] | インデックス(0から開始)を指定して要素を取得(結果は banana) |
| 長さ取得 | llength $mylist | リストの要素数を返す |
| 範囲抽出 | lrange $mylist 0 1 | 指定範囲(インデックス0〜1)の要素を新しいリストとして抽出 |
| 要素の置換 | set mylist [lreplace $mylist 1 1 "blueberry"] | 指定範囲の要素を置き換えた新しいリストを返す |
| 検索 | lsearch $mylist "banana" | 一致する要素のインデックスを返す(無ければ -1) |
| ソート | lsort $mylist | リストの要素を並び替えた新しいリストを返す(オプションで数値順や降順も可) |
| ループ処理 | foreach item $mylist { puts $item } | すべての要素を順に処理 |
ディクショナリ (dict)
Tcl 8.5で導入。純粋な「値」として扱えるため、プロシージャの引数や戻り値にそのまま利用可能。多重ネストに対応。
| 操作 | コマンド例 | 説明 |
|---|---|---|
| 初期化・生成 | set d [dict create name "Bob" age 30] | キーと値のペアから生成 |
| 値の参照 | set val [dict get $d name] | キーを指定して値を取得 |
| 値の設定・更新 | dict set d age 31 | キーに値を設定(変数を直接書き換え) |
| 存在確認 | dict exists $d name | キーが存在するか確認(1 または 0) |
| ループ処理 | dict for {k v} $d { puts "$k = $v" } | キーと値を同時に抽出して反復処理 |
| キー一覧 | dict keys $d | すべてのキーをリストで返す |
| 削除 | dict unset d age | 特定のキーと値を削除 |
| ネスト操作 | dict set company depts sales mgr "Tom" | 階層構造(company → depts → sales → mgr)に値を設定 |
連想配列 (array)
変数に紐づく伝統的なハッシュ構造。値として他のコマンドに直接渡せないため、参照渡し(upvar)等が必要。
| 操作 | コマンド例 | 説明 |
|---|---|---|
| 個別代入 | set user(name) "Alice" | キー name に値を設定 |
| 一括代入 | array set user {name "Alice" age 25} | リストから一括設定 |
| 値の参照 | set val $user(name) | キーを指定して値を取得 |
| 存在確認 | info exists user(name) | キーが存在するか確認(1 または 0) |
| キー一覧 | array names user | すべてのキーをリストで返す |
| ループ処理 | foreach key [array names user] { puts $user($key) } | 全要素の反復処理 |
| 削除 | unset user(name) | 特定のキーと値を削除 |
tcl.txt · 最終更新: by Takuya Nishimoto
