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