Main Content

struct

구조체형 배열

설명

구조체형 배열필드라는 데이터 컨테이너를 사용하여 관련 데이터를 그룹화하는 데이터형입니다. 각 필드에는 모든 데이터형이 포함될 수 있습니다. 필드의 데이터에 액세스할 때는 structName.fieldName 형식의 점 표기법을 사용하십시오.

생성

데이터를 새 구조체에 추가하려면 필드의 이름을 한 번에 하나씩 지정하는 점 표기법을 사용하여 구조체를 생성하십시오.

s.a = 1;
s.b = {'A','B','C'}
s = struct with fields:
    a: 1
    b: {'A'  'B'  'C'}

필드 이름은 ASCII 문자(A–Z, a–z), 숫자(0–9) 및 밑줄을 포함할 수 있으며 영문자로 시작해야 합니다. 필드 이름의 최대 길이는 namelengthmax입니다.

아래 설명처럼 struct 함수를 사용하여 구조체형 배열을 생성할 수도 있습니다. 여러 필드를 동시에 지정하거나 비 스칼라 구조체형 배열을 생성할 수 있습니다.

설명

s = struct는 필드가 없는 스칼라(1×1) 구조체를 만듭니다.

예제

s = struct(field,value)는 지정된 필드와 값을 가진 구조체형 배열을 만듭니다. value 입력 인수는 숫자형 배열, 논리형 배열, 문자형 배열, 셀형 배열 같은 모든 데이터형일 수 있습니다.

  • value가 셀형 배열이 아니거나 value가 스칼라 셀형 배열이면 s는 스칼라 구조체입니다. 예를 들어, s = struct('a',[1 2 3])s.a = [1 2 3]인 1×1 구조체를 만듭니다.

  • value가 비 스칼라 셀형 배열인 경우 svalue와 차원이 같은 구조체형 배열입니다. s의 각 요소에는 value의 해당하는 요소가 포함되어 있습니다. 예를 들어, s = struct('x',{'a','b'})s(1).x = 'a's(2).x = 'b'를 반환합니다.

  • value가 빈 셀형 배열 {}인 경우 s는 빈(0×0) 구조체입니다.

예제

s = struct(field1,value1,...,fieldN,valueN)은 여러 개의 필드를 가진 구조체형 배열을 만듭니다.

  • value 입력값이 셀형 배열이거나 셀형 배열의 모든 value 입력값이 스칼라인 경우 s는 스칼라 구조체입니다.

  • value 입력값에 비 스칼라 셀형 배열이 있는 경우 s는 이 비 스칼라 셀형 배열과 차원이 같습니다. 또한, 둘 이상의 value 입력값이 비 스칼라 셀형 배열인 경우 모든 비 스칼라 셀형 배열의 차원이 같아야 합니다.

    스칼라 셀형 배열이나 다른 데이터형으로 구성된 배열인 value의 경우, structvalue의 내용을 s의 모든 요소에 관련된 필드에 삽입합니다. 예를 들어, s = struct('x',{'a','b'},'y','c')s(1).x = 'a', s(2).x = 'b', s(1).y = 'c', s(2).y = 'c'를 반환합니다.

  • value 입력값이 빈 셀형 배열 {}인 경우, 출력값 s는 빈(0×0) 구조체입니다. 빈 필드를 지정하고 기타 다른 필드의 값을 유지하려면 []value 입력값으로 대신 사용하십시오.

s = struct([])은 필드가 없는 빈(0×0) 구조체를 만듭니다.

s = struct(obj)obj의 속성에 대응하는 필드 이름과 값을 가진 스칼라 구조체를 만듭니다. struct 함수는 obj를 변환하지 않고, s를 새 구조체로 생성합니다. 이 구조체는 클래스 정보를 유지하지 않으므로 프라이빗 속성, 보호 속성 및 숨겨진 속성이 s의 퍼블릭 필드가 됩니다. 이 구문을 사용하는 경우 struct 함수가 경고를 발생시킵니다.

입력 인수

모두 확장

필드 이름으로, 문자형 벡터 또는 string형 스칼라로 지정됩니다.

값으로, 임의 유형의 배열로 지정됩니다. value 입력값 중 하나라도 비 스칼라 셀형 배열인 경우, 모든 비 스칼라 셀형 배열 입력값은 차원이 동일해야 합니다.

value 입력값 중 하나라도 빈 셀형 배열 {}인 경우에 출력값은 빈 구조체형 배열입니다. 빈 필드 하나를 지정하려면 []을 사용하십시오.

struct 함수는 obj의 속성을 새 스칼라 구조체의 필드로 복사합니다.

struct 함수는 대부분의 기본 데이터형으로부터 구조체를 생성하지 않습니다. 예를 들어, objdouble형 또는 char인 경우 struct는 오류 메시지를 발생시킵니다. 단, struct는 테이블 또는 타임테이블의 속성은 구조체로 반환합니다. 기본 데이터형 목록은 MATLAB 기본 클래스 항목을 참조하십시오.

예제

모두 축소

구조체의 필드에 관련된 데이터 조각을 저장합니다. 필드에는 데이터를 설명하면서 직관적인 이름을 지정할 수 있습니다.

점 표기법을 사용하여 필드를 구조체에 추가하는 방법으로 구조체를 생성합니다. 각 필드는 사인파의 x, y 값, 그리고 데이터를 설명하는 텍스트를 포함합니다.

data.x = linspace(0,2*pi);
data.y = sin(data.x);
data.title = 'y = sin(x)'
data = struct with fields:
        x: [0 0.0635 0.1269 0.1904 0.2539 0.3173 0.3808 0.4443 0.5077 0.5712 0.6347 0.6981 0.7616 0.8251 0.8885 0.9520 1.0155 1.0789 1.1424 1.2059 1.2693 1.3328 1.3963 1.4597 1.5232 1.5867 1.6501 1.7136 1.7771 1.8405 1.9040 1.9675 ... ] (1x100 double)
        y: [0 0.0634 0.1266 0.1893 0.2511 0.3120 0.3717 0.4298 0.4862 0.5406 0.5929 0.6428 0.6901 0.7346 0.7761 0.8146 0.8497 0.8815 0.9096 0.9341 0.9549 0.9718 0.9848 0.9938 0.9989 0.9999 0.9969 0.9898 0.9788 0.9638 0.9450 0.9224 ... ] (1x100 double)
    title: 'y = sin(x)'

사인파를 플로팅합니다. 필드 이름을 사용하여 x, y 값으로 구성된 배열을 참조할 수 있습니다. 그런 다음, 제목을 추가합니다.

plot(data.x,data.y)
title(data.title)

Figure contains an axes object. The axes object with title y = sin(x) contains an object of type line.

하나의 필드를 포함하는 비 스칼라 구조체를 만듭니다.

field = 'f';
value = {'some text';
         [10, 20, 30];
         magic(5)};
s = struct(field,value)
s=3×1 struct array with fields:
    f

각 요소의 내용을 확인합니다.

s.f
ans = 
'some text'
ans = 1×3

    10    20    30

ans = 5×5

    17    24     1     8    15
    23     5     7    14    16
     4     6    13    20    22
    10    12    19    21     3
    11    18    25     2     9

s.f 같은 비 스칼라 구조체의 필드에 액세스하는 경우 MATLAB®은 쉼표로 구분된 목록을 반환합니다. 이 경우 s.fs(1).f, s(2).f, s(3).f와 동일합니다.

여러 개의 필드를 포함하는 비 스칼라 구조체를 만듭니다.

field1 = 'f1';  value1 = zeros(1,10);
field2 = 'f2';  value2 = {'a', 'b'};
field3 = 'f3';  value3 = {pi, pi.^2};
field4 = 'f4';  value4 = {'fourth'};

s = struct(field1,value1,field2,value2,field3,value3,field4,value4)
s=1×2 struct array with fields:
    f1
    f2
    f3
    f4

value2value3의 셀형 배열은 1×2이므로 s도 1×2가 됩니다. value1은 셀형 배열이 아니라 숫자형 배열이므로 s(1).f1s(2).f1은 같은 내용을 갖습니다. 마찬가지로, value4의 셀형 배열은 단일 요소를 가지므로 s(1).f4s(2).f4는 같은 내용을 갖습니다.

s(1)
ans = struct with fields:
    f1: [0 0 0 0 0 0 0 0 0 0]
    f2: 'a'
    f3: 3.1416
    f4: 'fourth'

s(2)
ans = struct with fields:
    f1: [0 0 0 0 0 0 0 0 0 0]
    f2: 'b'
    f3: 9.8696
    f4: 'fourth'

빈 필드를 포함하는 구조체를 만듭니다. 빈 필드의 값을 지정하려면 []을 사용하십시오.

s = struct('f1','a','f2',[])
s = struct with fields:
    f1: 'a'
    f2: []

셀형 배열을 포함하는 필드를 갖는 구조체를 만듭니다.

field = 'mycell';
value = {{'a','b','c'}};
s = struct(field,value)
s = struct with fields:
    mycell: {'a'  'b'  'c'}

여러 개의 필드를 포함하는 빈 구조체를 만듭니다.

s = struct('a',{},'b',{},'c',{})
s = 

  0x0 empty struct array with fields:

    a
    b
    c

빈 구조체의 필드에 값을 할당합니다.

s(1).a = 'a'
s = struct with fields:
    a: 'a'
    b: []
    c: []

중첩 구조체를 만듭니다. a는 다른 구조체를 포함하는 필드를 가진 구조체입니다.

a.b = struct('c',{},'d',{})
a = struct with fields:
    b: [0x0 struct]

a.b의 필드 이름을 확인합니다.

fieldnames(a.b)
ans = 2x1 cell
    {'c'}
    {'d'}

확장 기능

버전 내역

R2006a 이전에 개발됨

모두 확장