lrange — 리스트에서 인접한 여러 원소 꺼내기

lrange — 리스트에서 인접한 여러 원소 꺼내기

리스트의 일정 구간, 그러니까 연속한 원소 여러 개를 한 번에 가져오고 싶을 때 쓰는 명령어가 lrange예요. 시작 인덱스와 끝 인덱스를 주면 그 범위의 원소들을 새 리스트로 묶어 돌려줘요. end-2처럼 끝을 기준으로 지정할 수도 있고요. 여기서 짚고 넘어가야 할 점이 하나 있는데, lrange로 단일 원소를 고르는 건 lindex로 고르는 것과 결과가 다를 수 있다는 거예요.

출처: 문서

본문

list는 유효한 Tcl 리스트여야 해요. 이 명령어는 first부터 last까지(끝 포함)의 원소들로 이루어진 새 리스트를 반환해요. 인덱스 값 firstlaststring index 명령어의 인덱스 값과 똑같이 해석되어, 단순 인덱스 산술과 리스트 끝을 기준으로 한 인덱스를 지원해요. first가 0보다 작으면 0인 것처럼 처리돼요. last가 리스트의 원소 개수보다 크거나 같으면 end인 것처럼 처리돼요. firstlast보다 크면 빈 문자열이 반환돼요.

참고로 lrange list first first는 항상 lindex list first와 같은 결과를 내지는 않아요(중괄호로 감싸지 않은 단순 필드에는 종종 같지만요). 다만 list [lindex list first]와는 정확히 같은 결과를 내요.

구문은 다음과 같아요.

lrange list first last

예시

처음 두 원소 선택하기:

% lrange {a b c d e} 0 1
a b

마지막 세 원소 선택하기:

% lrange {a b c d e} end-2 end
c d e

첫 번째와 마지막 원소를 제외한 나머지 선택하기:

% lrange {a b c d e} 1 end-1
b c d

lrange로 단일 원소를 고르는 건 lindex로 고르는 것과 달라요.

% set var {some {elements to} select}
some {elements to} select
% lindex $var 1
elements to
% lrange $var 1 1
{elements to}

더 알아보기

  • list, lappend, lindex, linsert, llength, lsearch, lset, lreplace, lsort, string