set ary(名前) 太郎 set ary(性別) 男 set ary(年齢) 10歳 puts "$ary(名前) $ary(性別) $ary(年齢)" => 太郎 男 10歳 |
set ary(名前) 太郎 set ary(性別) 男 set ary(年齢) 10歳 parray ary => ary(名前) = 太郎 => ary(年齢) = 10歳 => ary(性別) = 男 |
配列名と添字は、変数展開とコマンド展開の結果を使うことができます。
ただし、配列名に変数展開の結果を使う場合は、中括弧を使う必要があります。
set name ary set ${name}(名前) 太郎 set ${name}(名前) => 太郎 set x ${name}(名前) => ary(名前) set x [set ${name}(名前)] => 太郎 |
set index 名前 set ary($index) 太郎 set ary($index) => 太郎 set x $ary($index) => 太郎 |
配列名の添字に変数展開の結果を使うもう1つの例です。
for文で回して添え字を変化させています。
for {set index 0} {$index < 5} {incr index} { set ary($index) $index } parray ary => ary(0) = 0 => ary(1) = 1 => ary(2) = 2 => ary(3) = 3 => ary(4) = 4 |
array set ary { 名前 太郎 性別 男 年齢 10歳 } parray ary => ary(名前) = 太郎 => ary(年齢) = 10歳 => ary(性別) = 男 |
arrayコマンドには以下のオプションがあります。
array exists arrayName | arrayNameが配列であれば1を返す。そうでなければ0を返す。 |
array get arrayName ?pattern? | パターンにマッチした添字の要素のペアリストを返す。パターンを省略した場合は、全ての要素のペアリストを返す。パターンはglob形式を使います。 |
array names arrayName ?pattern? | パターンにマッチした添字を返す。パターンを省略した場合は、全ての添字を返す。 |
array set arrayName list | リストから配列を作成する。 |
array size arrayName | 配列の要素数を返す。 |
array unset arrayName ?pattern? | パターンにマッチした添字の要素を削除する。パターンを省略した場合は、配列を削除する。 |
配列をリストに変換する例です。
array set ary { 名前 太郎 性別 男 年齢 10歳 } array get ary => 名前 太郎 年齢 10歳 性別 男 |
配列の添字をリストする例です。
array set ary { 名前 太郎 性別 男 年齢 10歳 } array names ary => 名前 年齢 性別 |
配列をコピーする例です。
array set ary { 名前 太郎 性別 男 年齢 10歳 } # 配列をコピーするプロシジャ proc copy {ary1 ary2} { upvar $ary1 from $ary2 to foreach {index value} [array get from *] { set to($index) $value } } # コピー copy ary foo # 結果 parray foo => foo(名前) = 太郎 => foo(年齢) = 10歳 => foo(性別) = 男 |
for {set i 0} {$i < 10} {incr i} { for {set j 0} {$j < 10} {incr j} { set ary($i,$j) "$i,$j" } } parray ary ary(0,0) = 0,0 ary(0,1) = 0,1 ary(0,2) = 0,2 ...途中省略... ary(9,7) = 9,7 ary(9,8) = 9,8 ary(9,9) = 9,9 |