1

簡単な質問がありますが、私には合いません。多くのフィールドを含む構造体を事前に割り当てたいと考えています。私はそれを次のように取得したいと考えています: 構造 S 1x30 で、30 個のフィールドのそれぞれが構造 1x50 である必要があります (50 エントリの整数の一部、文字列を含むセル、サブ配列の一部)。50個のフィールドのそれぞれに正確な名前を付けずに事前に割り当てることは可能ですか?

乾杯!

4

1 に答える 1

2

AFAIK構造体フィールドには名前を付ける必要がありますが、これらの名前をハードコーディングする必要はありません。

たとえば、次のようなfoo名前のフィールドを持つ構造体がある場合bar、そのフィールドにアクセスできます。

name = 'bar';
data = foo.(name);  % the same as data = getfield(data, name);

このfoo.(name)表記は、ドキュメントがここにある変数(動的フィールド名)からフィールド名を作成できることを示しています。さらに、これを使用してフィールドを作成できます。

name = 'bar'
for i = 1:10
  nameI = [bar, num2str(i)] ;
  foo.( nameI) = []; % the same as foo = setfield(foo, nameI, []);
end

構造体には、、、 ...という名前のfoo10個のフィールドがあります。bar1bar2bar10

名前が絶対に必要でなく、単にインデックスが必要な場合は、おそらくセル配列が必要です。セル配列は、何でも含めることができることを除けば、通常のMATLABベクトルに似ています。

c = {'1234', 1234, [1 2 3 4],  [1 2; 3 4], @disp, {1 ,2, 3}};

たとえばc、文字列、スカラー、ベクトル、行列、関数ハンドルを含むセル配列と、別のセル配列があります。

中括弧を使用して、個々のセルの内容にアクセスできます{}。したがって 、c{1}は戻り'1234'ますc{2}が、数値は戻ります。

これらの方法のいずれかを使用して、説明した内容に適合するデータ構造を事前に割り当てることができます。

于 2012-08-09T20:08:23.280 に答える