Main Content

비 스칼라 구조체형 배열의 요소에 액세스

이 예제에서는 비 스칼라 구조체형 배열에 포함된 여러 요소의 데이터를 액세스하고 처리하는 방법을 보여줍니다.

필드 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

관련 정보는 다음을 참조하십시오.