Creating an array of structs and using the field directly?

4 views (last 30 days)
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?
  1 Comment
Guillaume on 26 Feb 2016
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.

Sign in to comment.

Answers (1)

Andy Campbell
Andy Campbell on 26 Feb 2016
Edited: Andy Campbell on 26 Feb 2016
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)], ...
ans =
[1] [2]


Find more on Structures in Help Center and File Exchange


Community Treasure Hunt

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

Start Hunting!

Translated by