Main Content

getfield

構造体配列のフィールド内容の取得

説明

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.aS.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 を使用する場合、インデックスを cell 配列で指定します。

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

あるいは、構造体配列にインデックスを付けてから、ドット表記を使用してフィールドを指定します。

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

入れ子にされた構造体のフィールドにアクセスします。この構造体の一部のレベルにある構造体は構造体配列になっています。この例では、S は 1 行 2 列の構造体配列です。2 番目の要素である S(2) には入れ子にされた構造体 a.b があります。ここで、b は 1 行 3 列の構造体配列です。

最初に、入れ子にされた構造体を作成します。ドット表記を使用して構造体を作成した後、関数 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 の 3 番目の要素から d の値を返します。cell 配列を使用して、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 を使用して、配列の要素を返します。サブ配列を返すには、フィールド名の後にインデックスを指定します。cell 配列内のインデックスを指定しなければなりません。

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 スカラーとして指定します。

インデックス。数値の cell 配列または logical 値として指定します。S のインデックスとフィールド 1 ~ N-1 は、構造体配列の要素を指定します。フィールド N のインデックスは、そのフィールド内の配列の任意の型の要素を指定します。

例: getfield(S,{1,2},'a')S(1,2).a と等価です。

例: S.a = [5 10 20] の場合、getfield(S,'a',{[2,3]})[10 20] を返します。

拡張機能

バージョン履歴

R2006a より前に導入