구조체 배열

구조체 배열 (Structure Arrays)

구조체 배열은 구조체의 특별한 형태예요. 보통 구조체에서는 각 필드가 하나의 값을 갖지만, 구조체 배열에서는 그 대신 각 필드가 셀 배열(cell array)로 표현되고, 이 셀 배열들이 전부 같은 차원을 가져요. 개념적으로 보면 "필드 구성이 똑같은 구조체들을 배열로 나열한 것"이라고 봐도 돼요.

출처: 문서

본문

구조체 배열을 만드는 예시를 볼게요.

x(1).a = "string1";
x(2).a = "string2";
x(1).b = 1;
x(2).b = 2;

이 코드는 두 개의 필드(a, b)를 가진 1-by-2 구조체 배열을 만들어요. 구조체 배열을 만드는 다른 방법으로는 struct 함수를 쓰는 게 있어요(구조체 생성 항목 참고). 배열의 값을 출력하려면 이전처럼 그 이름을 입력하면 돼요.

x
     ⇒  x =
        {
          1x2 struct array containing the fields:

            a
            b
        }

구조체 배열의 각 요소는 인덱싱으로 꺼낼 수 있고, 그 결과는 두 필드를 가진 구조체가 돼요.

x(1)
     ⇒  ans =
        {
          a = string1
          b =  1
        }

게다가 구조체 배열을 자신의 필드 이름으로 인덱싱하면, 필드 값들의 쉼표로 구분된 리스트(comma-separated list)를 돌려줘요(쉼표로 구분된 리스트 항목 참고). 예를 들면:

x.a
     ⇒ 
        ans = string1
        ans = string2

이 쉼표로 구분된 리스트를 대입문의 왼쪽에 쓸 수도 있어요.

[x.a] = deal ("new string1", "new string2");
 x(1).a
     ⇒  ans = new string1
 x(2).a
     ⇒  ans = new string2

숫자 배열과 마찬가지로 벡터를 인덱스로 쓸 수도 있어요(인덱스 표현식 항목 참고).

x(3:4) = x(1:2);
[x([1,3]).a] = deal ("other string1", "other string2");
x.a
     ⇒ 
        ans = other string1
        ans = new string2
        ans = other string2
        ans = new string2

size 함수는 구조체의 크기를 돌려줘요. 위 예제의 경우:

size (x)
     ⇒  ans =

          1   4

구조체 배열의 요소는 숫자 배열과 비슷하게, 그 요소에 빈 행렬을 대입해서 삭제할 수 있어요. 예를 들어:

in = struct ("call1", {x, Inf, "last"},
             "call2", {x, Inf, "first"})
     ⇒  in =
        {
          1x3 struct array containing the fields:

            call1
            call2
        }

in(1) = [];
in.call1
     ⇒ 
       ans = Inf
       ans = last

더 알아보기

  • 구조체를 만드는 다양한 방법은 struct 함수와 구조체 생성 항목을 참고하세요.
  • 구조체 배열의 요소를 하나씩 다룰 때는 구조체 요소 루프 항목도 함께 보면 좋아요.