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
|