Initialize a field in all elements of a struct array

15 views (last 30 days)
Hi,
I'm looking for a "one-liner" for initialization of a certain field in an existing struct array. I know that I may achieve this by calling struct(somefiledname,values), or something similar) but I want to initialize all of these additional fields for an existing array of structs, without changing the existing fields.
For example- I have a(1).field1=1; a(2).field1=2; a(3).field1=3;
and I want a one-liner which will add an additional field- "field2" to the "a" struct array (possibly- all ones, all zeros etc.).
Any such shortcut? Or the only way is to iterate through the array?
Thanks!

Accepted Answer

Stephen23
Stephen23 on 1 Aug 2018
Edited: Stephen23 on 1 Aug 2018
Simpler:
[a.field2] = deal(1);
Or if you have multiple items to use:
C = {1,2,3};
[a.field2] = C{:};

More Answers (2)

Adam Danz
Adam Danz on 1 Aug 2018
Edited: Adam Danz on 1 Aug 2018
Try this out. It adds a field named 'field2' to each structure and allocates a vector of 4 zeros.
a = arrayfun(@(x) setfield(x, 'field2', zeros(1,4)), a);

James Tursa
James Tursa on 1 Aug 2018
Another way using deal:
[a(1:numel(a)).field2] = deal(4);

Categories

Find more on Structures in Help Center and File Exchange

Products

Community Treasure Hunt

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

Start Hunting!