배열의 인덱싱에 관하여 어쩌면 다들 아실만한 내용일 수도 있는데, 괜시리 호들갑떠는 것 같기도 합니다. 어쨌든 뭐 말씀을 드려보면, 일단 다음과 같은 배열이 있다고 가정해봅시다.
IDL> data = [30, 85, 70, 95, 60]
이 배열에서 특정 위치부터 끝까지에 해당되는 부분 원소들을 추출해서 출력하기 위해서는 어떻게 해야 할까요? 예를 들어 세번째부터 마지막(다섯번째) 원소까지를 출력하려면 다음과 같이 범위 인덱싱을 할 수 있습니다.
IDL> PRINT, data[2:4]
70 95 60
그런데 마지막 원소의 위치에 대한 인덱스를 명시적으로 표시하지 않고도 어디서부터 마지막까지라는 방식의 인덱싱을 하는 방법도 있습니다. 첫번째 방법은 N_ELEMENTS 함수를 사용하여 배열내 원소들의 갯수를 구하여 사용하는 방법입니다. 다음과 같은 방식이 될겁니다.
IDL> PRINT, data[2:N_ELEMENTS(data)-1]
70 95 60
그런데 이렇게 N_ELEMENTS 함수를 사용하지 않는 방법도 있습니다. 이게 두번째 방법인데요. 다음과 같습니다.
IDL> PRINT, data[2:*]
70 95 60
여기서 이와 같이 와일드카드(*)가 사용될 수 있습니다. 저도 사실 첫번째 방법을 많이 써온게 사실입니다. 그런데 두번째 방법이 가능하다는 것을 저도 비교적 최근에 깨달았습니다. 이게 어쩌다 알게 된 것이냐 하면, 포트란에서 이와 유사한 인덱싱 방법이 있거든요. 다음과 같은 방식입니다.
PRINT*, data(3:)
물론 포트란에서는 인덱스의 시작이 1이라는 점, 그리고 배열 인덱싱에 있어서 일반괄호만 사용된다는 점 등의 차이가 있습니다. 하여간 이와 같이 콜론뒤를 비워놓으면 끝까지라는 의미로 알아서 해석이 됩니다. 하여간 프로그래밍 언어를 사용하다보면 다들 알만한 뻔하다싶은 방법같은데 미처 몰랐던 것이 종종 발견되는 경험들을 하실겁니다. 이 내용도 이미 다 아시는 분들은 그냥 "쯪쯪~"하고 넘기시면 되고, 혹시 모르셨던 분들이라면 같이 공유하면 좋겠습니다.
'IDL > Programming' 카테고리의 다른 글
| 2바이트 유니코드 문자(한, 중, 일 언어) 처리의 예 (0) | 2013.08.14 |
|---|---|
| 삼각함수의 사용에 있어서 유의할 점들 (0) | 2013.07.04 |
| 알아두면 편리한 문자처리 함수들 [4] (0) | 2013.01.18 |
| 알아두면 편리한 문자처리 함수들 [3] (0) | 2013.01.17 |
| 알아두면 편리한 문자처리 함수들 [2] (0) | 2013.01.16 |