1. ホーム
  2. matlab

MATLABで構造体のフィールド名を反復処理する

2023-12-01 15:52:09

質問

私の質問を簡単にまとめると、次のようになります。 "なぜ以下は動作しないのでしょうか。

teststruct = struct('a',3,'b',5,'c',9)

fields = fieldnames(teststruct)

for i=1:numel(fields)
  fields(i)
  teststruct.(fields(i))
end

を出力します。

ans = 'a'

??? Argument to dynamic structure reference must evaluate to a valid field name.

特に teststruct.('a') を働かせます。そして fields(i) はプリントアウトします。 ans = 'a' .

頭が回らない。

どのように解決するのですか?

中括弧( {} ) を使って fields にアクセスできるようになりました。 fieldnames 関数は セル配列 の文字列を返します。

for i = 1:numel(fields)
  teststruct.(fields{i})
end

括弧を使用して を使用して、セル配列のデータにアクセスします。 を使用すると、別のセル配列が返されるだけで、文字配列とは異なる表示がなされます。

>> fields(1)  % Get the first cell of the cell array

ans = 

    'a'       % This is how the 1-element cell array is displayed

>> fields{1}  % Get the contents of the first cell of the cell array

ans =

a             % This is how the single character is displayed