Main Content

getfield

구조체형 배열(Structure Array)의 필드

설명

예제

value = getfield(S,field)는 구조체 S의 지정된 필드에서 값을 반환합니다. 예를 들어, S.a = 1이면 getfield(S,'a')1을 반환합니다.

getfield를 사용하는 대신 점 표기법 value = S.field를 사용할 수도 있습니다. 일반적으로 점 표기법이 보다 효율적입니다.

S가 비 스칼라인 경우 getfield는 배열의 첫 번째 요소에 있는 값을 반환하며, 이는 S(1).field와 동일합니다.

예제

value = getfield(S,field1,...,fieldN)은 중첩 구조체에 저장된 값을 반환합니다. 예를 들어, S.a.b.c = 1이면 getfield(S,'a','b','c')1을 반환합니다.

예제

value = getfield(S,idx,field1,...,fieldN)은 구조체형 배열의 요소를 지정합니다. 예를 들어, S(3,4).a = 1이면 getfield(S,{3,4},'a')1을 반환합니다.

예제

value = getfield(S,idx,field1,idx1,...,fieldN,idxN)은 필드의 요소를 지정합니다. 예를 들어, S.a(2) = 1이면 getfield(S,'a',{2})1을 반환합니다. 마찬가지로, S(3,4).a(2).b = 1이면 getfield(S,{3,4},'a',{2},'b')1을 반환합니다.

예제

모두 축소

what 함수가 반환하는 구조체의 필드에서 값을 가져옵니다. what은 지정된 폴더의 경로와 이 폴더에 들어 있는 다양한 유형의 파일의 이름을 포함하는 필드로 구성된 스칼라 구조체를 반환합니다.

S = what('C:\Temp')
S = struct with fields:
        path: 'C:\Temp'
           m: {'testFunc1.m'}
       mlapp: {0×1 cell}
         mlx: {'testFunc2.mlx'}
         mat: {2×1 cell}
         mex: {0×1 cell}
         mdl: {0×1 cell}
         slx: {0×1 cell}
           p: {0×1 cell}
     classes: {0×1 cell}
    packages: {0×1 cell}

mlx 필드에 나열된 모든 라이브 스크립트의 이름을 반환합니다. getfield 함수를 사용하면 구조체를 저장할 임시 변수를 사용하지 않고도 함수가 반환하는 구조체의 필드에 액세스할 수 있습니다.

value = getfield(what('C:\Temp'),'mlx')
value = 1×1 cell array
    {'testFunc2.mlx'}

점 표기법을 사용하여 필드에 액세스할 수도 있습니다.

value = S.mlx
value = 1×1 cell array
    {'testFunc2.mlx'}

중첩 구조체의 필드에 액세스합니다. 중첩 구조체에서는 모든 수준의 구조체가 구조체 필드와 구조체가 아닌 필드를 가질 수 있습니다.

먼저 중첩 구조체를 만듭니다.

S.a.b.c = 1;
S.a.b.d = 'two';
S.a.b.e = struct('f',[3 4],'g','five');
S.h = 50
S = struct with fields:
    a: [1x1 struct]
    h: 50

S는 구조체이고 S.a, S.a.bS.a.b.e 필드도 구조체입니다.

S.a
ans = struct with fields:
    b: [1x1 struct]

S.a.b
ans = struct with fields:
    c: 1
    d: 'two'
    e: [1x1 struct]

S.a.b.e
ans = struct with fields:
    f: [3 4]
    g: 'five'

getfield 함수를 사용하여 S.a.b.d의 값을 반환합니다. 쉼표로 구분된 중첩 구조체 이름 목록을 지정할 때는 맨 위의 구조체와 직접 지정하는 필드 이름 사이의 모든 수준에 있는 구조체를 포함해야 합니다. 여기서는 쉼표로 구분된 구조체 이름 목록은 'a','b'이고 필드 이름은 'd'입니다.

value = getfield(S,'a','b','d')
value = 
'two'

점 표기법을 사용하여 동일한 필드에 액세스할 수도 있습니다.

value = S.a.b.d
value = 
'two'

dir 함수가 반환하는 구조체형 배열의 요소에서 필드 값을 가져옵니다. dir은 구조체형 배열을 반환하며, 이 배열의 각 요소에는 지정된 폴더의 파일에 대한 정보가 포함되어 있습니다.

폴더 C:\Temp에 있는 파일에 대한 정보를 반환합니다. 폴더에는 5개의 파일이 들어 있습니다.

S = dir('C:\Temp')
S = 5×1 struct array with fields:
    name
    folder
    date
    bytes
    isdir
    datenum

5번째 파일에 대한 정보를 표시하기 위해 S의 요소를 참조합니다.

S(5)
ans = struct with fields:
       name: 'testFunc2.mlx'
     folder: 'C:\Temp'
       date: '19-Jul-2018 09:43:53'
      bytes: 2385
      isdir: 0
    datenum: 7.3726e+05

getfield 함수를 사용하여 S의 5번째 요소로 기술된 파일 이름을 반환합니다. getfield를 사용할 때는 셀형 배열에 인덱스를 지정합니다.

value = getfield(S,{5},'name')
value = 
'testFunc2.mlx'

그 대신 구조체형 배열의 요소를 참조한 다음 점 표기법을 사용하여 필드를 지정할 수도 있습니다.

value = S(5).name
value = 
'testFunc2.mlx'

구조체 수준 중 일부가 구조체형 배열인 중첩 구조체의 필드에 액세스합니다. 이 예제에서 S는 1×2 구조체형 배열입니다. 두 번째 요소 S(2)b가 1×3 구조체형 배열인 중첩 구조체 a.b를 갖습니다.

먼저 중첩 구조체를 만듭니다. 점 표기법을 사용하여 구조체를 만든 다음 struct 함수를 사용하여 또 다른 비 스칼라 구조체형 배열을 만들고 이것을 필드로 추가합니다.

S.a = 1;
S(2).a.b = struct('d',{5,10,20});
S
S=1×2 struct array with fields:
    a

S(2).a.b
ans=1×3 struct array with fields:
    d

getfield 함수를 사용하여 b의 세 번째 요소에서 d의 값을 반환합니다. 셀형 배열을 사용하여 Sb 모두의 인덱스를 지정해야 합니다.

value = getfield(S,{2},'a','b',{3},'d')
value = 20

점 표기법을 사용하여 동일한 필드에 액세스할 수도 있습니다.

value = S(2).a.b(3).d
value = 20

값이 배열인 필드를 갖는 구조체를 만듭니다.

S.a = [5 10 15 20 25]
S = struct with fields:
    a: [5 10 15 20 25]

getfield 함수를 사용하여 배열의 요소를 반환합니다. 부분배열을 반환하려면 필드 이름 뒤에 인덱스를 지정하십시오. 셀형 배열 내에서 인덱스를 지정해야 합니다.

value = getfield(S,'a',{[2:4]})
value = 1×3

    10    15    20

점 표기법과 배열 인덱싱을 사용하여 동일한 요소에 액세스할 수도 있습니다.

value = S.a(2:4)
value = 1×3

    10    15    20

입력 인수

모두 축소

구조체형 배열입니다. S가 비 스칼라이면 S의 각 요소는 구조체이고 모든 요소는 동일한 이름의 동일한 필드를 갖습니다.

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

인덱스로, 숫자형 값 또는 논리값으로 구성된 셀형 배열로 지정됩니다. S에 대한 인덱스와 1부터 N-1까지의 필드는 구조체형 배열의 요소를 지정합니다. 필드 N에 대한 인덱스는 필드 N에 있는 배열의 요소를 지정합니다. 이 필드는 임의의 유형일 수 있습니다.

예: getfield(S,{1,2},'a')S(1,2).a와 동일합니다.

예: S.a = [5 10 20]이면 getfield(S,'a',{[2,3]})[10 20]을 반환합니다.

확장 기능

버전 내역

R2006a 이전에 개발됨