본문 바로가기

Linux/tcl

[Tcl] tcl 리스트 / 배열

리스트 추가

- lappend

존재하지 않는 변수가 주어졌을 때는 새로 리스트를 생성하고 이미 존재하는 변수가 주어졌을 때는 리스트를 덧붙임

[ 원본 변수의 값이 변함 ]

set a ""        // 비어 있음
lappend a 1 2   // 만약, $a로 선언하면 원본이 변하지 않는다.
lappend a 3 4 5
set a

리스트 연결

- concat

주어진 argument들을 연결하여 하나의 리스트로 만든다. 원본 변수의 값이 변하지 않음

set a [list 1 2]
set b [list 3 4]
concat $a $b

리스트 원소 얻기

- llength 

주어진 리스트의 원소 갯수를 리턴

llength { 1 2 3 4 } 

set a [ list a b c ]
llength $a

 

- lindex

주어진 리스트 중에서 인덱스에 해당하는 원소를 리턴 // 인덱스는 0부터 시작임

lindex { a b c d } 1

set k [ list a b c d ]
lindex $k 0

 

- lrange

주어진 리스트 중에서 시작 인덱스와 끝 인덱스 사이의 원소를 리턴 

리스트의 끝까지 불러오는 인덱스 : end

set k [ list a b c d e f g ]

lrange $k 1 4
lrange $k 5 end

* lindex와 lrange 의 경우 저장된 데이터가 많을 경우 명령어의 수행 속도가 느려질 수 있으니 주의 *

 

리스트 원소 삽입 및 치환

* 원소 삽입 및 치환 명령어들은 대부분 원본 변수 값을 바꾸지 않는다. 

- linsert -[list] -[index] -[argument]

리스트 argument 들을 주어진 인덱스 위치에 끼워 넣음

linsert { 0 1 2 3 } 2 a b c d // 2 >> 숫자에 해당하는 index에 a b c d 를 삽입

set k [ list a b c d ]
linsert $k 0 5 6

 

- lreplace -[list] -[start_index] -[end_index] -[argument] 

리스트에서 시작 인덱스부터 끝 인덱스까지 주어진 argument 들로 바꿈

lreplace { 0 1 2 3 4 } 1 3 a b c d e // 1 ~ 3 에 해당하는 index 대신 argument로 치환
lreplace { 0 1 2 3 4 } 2 end d

 

리스트 검색과 정렬

- lsearch -[option]

option : -glob / -exact / -regexp [ default : -glob ]

리스트의 원소 중에서 패턴에 맞는 첫번째 원소를 찾아 그 원소에 해당하는 인덱스를 리턴,

패턴에 맞는 원소가 없는 경우 -1 리턴

lsearch { apple air snow } a* // apple에 해당하는 인덱스 0 출력
lsearch -exact { apple air snow } apple // apple 과 완전 일치하는 원소의 인덱스 출력

 

- lsort -[option]

리스트 원소들을 정렬하여 리턴

option : 

-ascii : ASCII 값에 따라 정렬

-dictionary : 사전 순으로 정렬

-integer : 원소들이 모두 정수임을 명시 / 아닐경우 Error 발생

-real : 원소들이 모두 실수임을 명시 / 아닐경우 Error 발생

-increasing : 오름차순으로 정렬 [default]

-decreasing : 내림차순으로 정렬

 

 

배열은 일련의 데이터를 인덱스를 사용해 저장하고 참조할 수 있도록 해줌

set name(last) hyun
set name(first) byunghun
set index last
puts $name($index)
result : hyun
puts $name( $index )
result : error //why? 공백도 문자로 취급하기 때문에

 

'Linux > tcl' 카테고리의 다른 글

[tcl]  (0) 2022.08.02
[Tcl] tcl 정규표현식  (0) 2022.06.10
[Tcl] tcl 문자열 조작  (0) 2022.05.18
[Tcl] tcl 제어구조  (0) 2022.05.17
[Tcl] tcl 기본문법  (0) 2022.05.17