非スカラー構造体配列の要素へのアクセス
この例では、非スカラー構造体配列の複数の要素からデータにアクセスして処理する方法を示します。
フィールド 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
関連情報については、以下を参照してください。