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 でリストを 1 つの変数に割り当てることはできません。しかし、以下のようにリスト項目を同数の変数に代入することができます。

[v1, v2, v3] = s.f;

または、以下のように cell 配列の要素に代入することもできます。

c = {s.f};

フィールドのすべてが同じ型のデータを含んでおり、超矩形を形成できる場合は、リスト項目を連結できます。たとえば、以下のように、フィールド 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

関連情報については、以下を参照してください。