Tcl은 문자열을 첨자로 하는 연상 배열을 사용할 수 있습니다. 배열의 첨자는 괄호 안에 임의의 문자열을 지정합니다. 개별적인 배열 요소의 값은 $로 직접 참조할 수 있습니다. 또한 parray 커맨드를 사용하여 모든 배열 요소의 값을 표시할 수 있습니다.
set ary(이름) 민인학
set ary(성별) 남
set ary(연령) 31세
puts "$ary(이름) $ary(성별) $ary(연령)"
=> 민인학 남 31세
parray ary
=> ary(이름) = 민인학
=> ary(연령) = 31세
=> 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)
=> 민인학
아래는 배열명의 첨자에 변수값을 사용한 예입니다. 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 커맨드
array 커맨드는 배열을 조작하기 위한 커맨드입니다. array set 커맨드를 사용하면 리스트로부터 배열을 생성할 수 있습니다.
array set ary {
이름 민인학
성별 남
연령 31세
}
parray ary
=> ary(이름) = 민인학
=> ary(연령) = 31세
=> 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 {
이름 민인학
성별 남
연령 31세
}
array get ary
=> 이름 민인학 연령 31세 성별 남
배열의 첨자를 리스트로 변환하는 예입니다.
array set ary {
이름 민인학
성별 남
연령 31세
}
array names ary
=> 이름 연령 성별
배열을 복사하는 예입니다.
array set ary {
이름 민인학
성별 남
연령 31세
}
# 배열을 복사하는 프로시져
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(연령) = 31세
=> foo(성별) = 남
2차원 배열
Tcl의 연상 배열은 1차원 배열이지만, 첨자가 문자열인것을 이용하여 아래와 같이 10x10의 2차원 배열과 같은 것도 표현 가능합니다.
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