Creating an array of structs and using the field directly?
2 views (last 30 days)
Show older comments
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 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.
Answers (1)
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)], ...
'UniformOutput',false)
ans =
[1] [2]
0 Comments
See Also
Categories
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!