Creating an array of structs and using the field directly?

2 ビュー (過去 30 日間)
Jan Kappen
Jan Kappen 2015 年 11 月 19 日
コメント済み: Guillaume 2016 年 2 月 26 日
Hey guys. I'm wondering if there is a workaround for doing something like this:
a = {[struct('field',1) struct('field',2)].field}
which works in octave but not in matlab ("invalid syntax at '.'. Possibly a ')', ']' or '}' is missing"), I have to use a temporary variable. This is quite annoying. Is there a workaround?
Thanks!
  1 件のコメント
Guillaume
Guillaume 2016 年 2 月 26 日
Note that this has nothing to do with with the fact that you're creating an array of structure. You're effectively doing
a = fn(someargs).field %where fn can be any function
which is illegal in matlab. Functions cannot be indexed using {} or . indexing.

サインインしてコメントする。

回答 (1 件)

Andy Campbell
Andy Campbell 2016 年 2 月 26 日
編集済み: Andy Campbell 2016 年 2 月 26 日
Do you need it to be a one liner? If not:
s = [struct('field',1) struct('field',2)];
a = {s.field};
Otherwise you can use arrayfun, but this isnt the most readable.
>> arrayfun(@(s) getfield(s,'field'), [struct('field',1) struct('field',2)])
ans =
1 2
>> arrayfun(@(s) getfield(s,'field'), ...
[struct('field',1) struct('field',2)], ...
'UniformOutput',false)
ans =
[1] [2]

カテゴリ

Help Center および File ExchangeStructures についてさらに検索

タグ

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!

Translated by