구조체형 배열
이름으로 구조화하려는 데이터가 있다면 구조체를 사용하여 저장할 수 있습니다. 구조체는 필드라는 컨테이너에 데이터를 저장하며, 지정한 이름으로 필드에 액세스할 수 있습니다. 점 표기법을 사용하여 구조체 필드에 데이터를 생성, 할당, 액세스합니다. 필드에 저장된 값이 배열인 경우 배열 인덱싱을 사용하여 배열의 요소에 액세스할 수 있습니다. 여러 개의 구조체를 구조체형 배열로 저장한 경우 배열 인덱싱과 점 표기법을 사용하여 개별 구조체와 해당 필드에 액세스할 수 있습니다.
스칼라 구조체 생성하기
먼저, 환자에 대한 데이터를 저장하는 필드가 있는 patient
라는 구조체를 생성합니다. 다음 도식은 구조체가 데이터를 어떻게 저장하는지 보여줍니다. patient
와 같은 구조체는 변수가 하나의 구조체를 저장하므로 스칼라 구조체라고도 합니다.
점 표기법을 사용하여 name
, billing
, test
필드를 추가하며 각 필드에 데이터를 할당합니다. 이 예제에서 patient.name
구문은 구조체와 구조체의 첫 번째 필드를 모두 생성합니다. 그다음에 나오는 명령은 필드를 추가합니다.
patient.name = 'John Doe';
patient.billing = 127;
patient.test = [79 75 73; 180 178 177.5; 220 210 205]
patient = struct with fields:
name: 'John Doe'
billing: 127
test: [3x3 double]
필드 값에 액세스하기
필드를 만든 후에는 계속 점 표기법을 사용하여 필드에 저장된 값에 액세스하고 이 값을 변경할 수 있습니다.
예를 들어, billing
필드의 값을 변경해 보겠습니다.
patient.billing = 512.00
patient = struct with fields:
name: 'John Doe'
billing: 512
test: [3x3 double]
점 표기법을 사용하여 임의의 필드 값에 액세스할 수도 있습니다. 예를 들어, patient.test
의 값에 대한 막대 차트를 만들어 보겠습니다. patient.name
의 텍스트를 사용하여 제목을 추가합니다. 필드에 배열이 저장된 경우 이 구문은 전체 배열을 반환합니다.
bar(patient.test)
title("Test Results for " + patient.name)
필드에 저장된 배열의 일부에 액세스하려면 배열의 크기와 유형에 적합한 인덱스를 추가하십시오. 예를 들어, patient.test
의 한 열에 저장된 데이터의 막대 차트를 만들어보겠습니다.
bar(patient.test(:,1))
비 스칼라 구조체형 배열의 요소 참조하기
구조체형 배열은 비 스칼라일 수 있습니다. 배열의 각 구조체가 동일한 필드를 가질 경우 임의 크기의 구조체형 배열을 만들 수 있습니다.
예를 들어, 두 번째 환자에 대한 데이터를 포함하는 두 번째 구조체를 patients
에 추가해 보겠습니다. 또한, 첫 번째 구조체의 billing
필드에 원래 값 127
을 할당해 보겠습니다. 이제 배열에 두 개의 구조체가 있으므로 patient(1).billing = 127
과 같이 인덱스를 사용하여 첫 번째 구조체에 액세스해야 합니다.
patient(2).name = 'Ann Lane';
patient(2).billing = 28.50;
patient(2).test = [68 70 68; 118 118 119; 172 170 169];
patient(1).billing = 127
patient=1×2 struct array with fields:
name
billing
test
결과적으로, patient
는 도식에 표시된 것과 같은 내용을 가진 1×2 구조체형 배열입니다.
배열의 각 환자 기록은 struct
클래스로 이루어진 구조체가 됩니다. 구조체로 구성된 배열을 구조체형 배열(struct array)이라고도 합니다. 그러나, 구조체형 배열(struct array)과 구조체형 배열(structure array)은 의미가 같습니다. 다른 MATLAB® 배열과 마찬가지로 구조체형 배열은 임의의 차원을 가질 수 있습니다.
구조체형 배열의 속성은 다음과 같습니다.
배열의 모든 구조체는 동일한 개수의 필드를 갖습니다.
모든 구조체는 필드 이름이 동일합니다.
다른 구조체에 있는 동일한 이름의 필드는 다른 데이터형 또는 다른 크기의 데이터를 포함할 수 있습니다.
모든 필드의 값을 지정하지 않으면서 배열에 새 구조체를 추가하면 지정되지 않은 필드는 빈 배열을 포함합니다.
patient(3).name = 'New Name';
patient(3)
ans = struct with fields:
name: 'New Name'
billing: []
test: []
구조체형 배열의 요소를 참조하려면 배열 인덱싱을 사용하십시오. 예를 들어, patient(2)
는 두 번째 구조체를 반환합니다.
patient(2)
ans = struct with fields:
name: 'Ann Lane'
billing: 28.5000
test: [3x3 double]
필드에 액세스하려면 배열 인덱싱과 점 표기법을 사용하십시오. 예를 들어, 두 번째 환자의 billing
필드의 값을 반환해 보겠습니다.
patient(2).billing
ans = 28.5000
필드에 저장된 배열의 요소를 참조할 수도 있습니다. patient(2).test
의 첫 번째 두 열만 표시하는 막대 차트를 만듭니다.
bar(patient(2).test(:,[1 2]))
참고
구조체형 배열의 단일 요소를 참조할 때만 필드 일부분의 요소를 참조할 수 있습니다. MATLAB®은 구조체형 배열의 여러 요소에서 필드의 요소를 참조하려고 하는 patient(1:2).test(1:2,2:3)
과 같은 명령문은 지원하지 않습니다. 이 경우에는 arrayfun
함수를 대신 사용하십시오.
참고 항목
struct
| fieldnames
| isfield