5

(方法) Matlab でネストされたフィールドに動的にアクセスできますか? 私はこのようなテストケースについて考えていました:

a = struct;
a.foo.bar = [];

place = {'foo', 'bar'};

a.(place{:})

% instead of the following, which only works if know in advance
% how many elements 'place' has
a.(place{1}).(place{2})
4

2 に答える 2

6

.( )主に動的フィールド名の構文の優雅さに欠けているため、私があまり満足していない解決策の1つは次のとおりです。

getfield(a, place{:})
于 2013-05-23T09:18:58.263 に答える
3

バリエーションのために、次を使用できますsubsref()

a.foo.bar = 'hi';
place     = {'foo', 'bar'};

% Build subs for referencing a structure and apply subsref
typesub   = [repmat({'.'},1,numel(place)); place];

subsref(a,substruct(typesub{:}))
ans =
hi

間違いなく、getfield()ビルドする必要がある場合は、はるかに読みやすく高速ですtypesub(そうしないと、そのような基本的なタスクでは速度の比較がわかりません)。

于 2013-05-23T15:45:22.700 に答える