비 스칼라 구조체형 배열의 요소에 액세스
이 예제에서는 비 스칼라 구조체형 배열에 포함된 여러 요소의 데이터를 액세스하고 처리하는 방법을 보여줍니다.
필드 f
를 갖는 1×3 구조체 s
를 생성합니다.
s(1).f = 1;
s(2).f = 'two';
s(3).f = 3 * ones(3);
배열에 포함된 구조체 각각이 동일한 개수의 필드와 동일한 필드 이름을 가져야 하지만 필드의 내용은 유형과 크기가 다를 수 있습니다. 다음과 같이 구조체형 배열의 여러 요소에 대해 필드 f
를 참조하는 경우
s(1:3).f
또는 다음을 사용합니다.
s.f
MATLAB®은 쉼표로 구분된 목록에 요소의 데이터를 반환하며, 이러한 목록은 다음과 같이 표시됩니다.
ans = 1 ans = two ans = 3 3 3 3 3 3 3 3 3
필드는 각기 다른 유형의 데이터를 포함할 수 있으므로 구문 v = s.f
를 사용하여 단일 변수에 목록을 할당할 수 없습니다. 그러나, 다음과 같이 동일한 개수의 변수에 목록 항목을 할당할 수 있습니다.
[v1, v2, v3] = s.f;
또는 다음과 같이 셀형 배열의 요소에 할당할 수도 있습니다.
c = {s.f};
모든 필드가 동일한 유형의 데이터를 포함하고 초평면 사각형(Hyperrectangle)을 형성할 수 있는 경우 목록 항목을 결합할 수 있습니다. 예를 들어, 필드 f
에 스칼라 숫자형 값을 가지는 구조체 nums
를 생성하고 필드의 데이터를 결합해 보겠습니다.
nums(1).f = 1; nums(2).f = 2; nums(3).f = 3; allNums = [nums.f]
이 코드가 반환하는 결과는 다음과 같습니다.
allNums = 1 2 3
동일한 연산을 사용하여 배열의 각 요소를 처리하려면 arrayfun
함수를 사용하십시오. 예를 들어, 배열 s
의 각 구조체에 대한 필드 f
에 포함된 요소의 개수를 세보겠습니다.
numElements = arrayfun(@(x) numel(x.f), s)
구문 @(x)
는 익명 함수를 만듭니다. 이 코드는 배열 s
의 각 요소에 대해 numel
함수(예: numel(s(1).f)
)를 호출하며 다음을 반환합니다.
numElements = 1 3 9
관련 정보는 다음을 참조하십시오.