다차원 배열과 연관 배열
메모리는 한 줄인데, 행과 열이 있는 표는 어떻게 담을까?
다차원 배열의 저장 순서
행부터 놓거나 열부터 놓거나
행과 열이 있는 배열도 메모리에서는 한 줄입니다. 한 행씩 이어 놓는 것이 행 우선 순서(row major order)이고 대부분의 언어가 씁니다. 한 열씩 이어 놓는 것이 열 우선 순서(column major order)이고 Fortran이 씁니다.
2행 3열짜리 표와 값은 예시입니다.
정형 배열과 비정형 배열
행의 길이가 같거나 다르거나
모든 행의 요소 수가 같고 모든 열의 요소 수도 같으면 정형 배열(rectangular array)입니다. 행마다 요소 수가 다를 수 있으면 비정형 배열(jagged array)입니다. 행 하나하나가 따로 있는 배열, 곧 배열의 배열이라서 길이가 달라도 됩니다.
C, C++, 자바는 비정형 배열을 지원하고, F#과 C#은 둘 다 지원합니다.
다차원 배열의 디스크립터
차원마다 범위를 적습니다
3편에서 본 디스크립터는 변수의 속성을 모아 둔 정보였습니다. 1차원 배열은 하한과 상한 한 쌍이면 됩니다. 다차원 배열은 차원 수를 적고, 인덱스 범위를 차원 수만큼 적습니다.
컴파일러는 이 정보로 어느 요소든 주소를 계산합니다.
연관 배열
번호 대신 키로 찾습니다
연관 배열(associative array)은 순서가 없는 요소들의 모음입니다. 요소마다 키(key)라는 값이 짝지어 있고, 번호가 아니라 키로 찾습니다. 그래서 값과 함께 키도 저장해야 합니다.
요일별 최고 기온은 교재의 예입니다. Perl, 파이썬, Ruby, Swift는 연관 배열이 언어에 들어 있습니다.
Perl의 연관 배열
넣고, 바꾸고, 지웁니다
Perl에서 연관 배열의 이름은 %로 시작합니다. 요소 하나는 중괄호 안에 키를 적어 가리킵니다. delete는 그 키의 요소를 없앱니다. 요소를 넣고 빼는 일이 자유롭습니다.
"Mon" => 77은 키 "Mon"에 값 77을 짝짓는다는 뜻입니다. 요소 하나를 가리킬 때는 이름 앞에 %가 아니라 $를 붙입니다. 교재의 예입니다.
다음 편