Adding a new field to a struct array

1.594 views (last 30 days)
Hey All! I'm trying to add a new field to a struct array inline. I have the following struct:
A(1).name = 'bob';
A(2).name = 'cindy';
newstruct = 'address'
How do I go about adding the a field A.address to the array struct with the field name being define din the newstruct variable? The existing array should then look like the following:
A(1).name = 'bob';
A(2).name = 'cindy';
A(1).address = [];
A(2).address = [];

Accepted Answer

Walter Roberson
Walter Roberson on 27 Jan 2018
A(1).(newstruct) = value;
If you have a cell array of contents to be put into existing entries, then you can use
[A.(newstruct)] = values_cell{:};
to set all of them at the same time.
  2 Comments
Walter Roberson
Walter Roberson on 11 Jun 2022
value in the above could be any variable or expression of any size or data type.
values_cell in the above would have to be a variable containing a cell array, in which the number of entries was the same as numel(A); each cell entry could be any data type or size.
More obscurely, values_cell could instead be the name of a true function (not function handle) for a function that could be called with no parameters, and which returned a cell array.
More obscurely still, values_cell could be the name of a class with a class constructor that could be invoked with no parameters, and the class defined subsref with {} operation, or defined the specialized method for overloading {}, so that the class name with no parameters defines an object and the {:} invoked whatever the {} operation was redefined as.

Sign in to comment.

More Answers (2)

Kallam Haranadha Reddy
Kallam Haranadha Reddy on 27 Jan 2018
A(1).name = 'bob';
A(2).name = 'cindy';
A(1).address = ' Flat No.502, Apple Towers,...
 1st line, Ravindra Nagar, Guntur,Andhra Pradesh, India,PIN-522006';
A(2).address = ' Flat No.102, Balaji Towers,...
2nd line, Brodipet, Guntur, Andhra Pradesh, India, PIN-522006';

sarah wentzel
sarah wentzel on 23 Jan 2022
Edited: sarah wentzel on 23 Jan 2022
I created this cell
somecell = struct('Name', {'bob', 'lea', 'pat'}, 'Birth_year', {1990, 1988, 2021})
and now I want to add new information, favorite color. I know I can do it one by one like this:
somecell(1).color = 'blue'
somecell(2).color = 'red'
somecell(3).color = 'green'
But is there a way to do it with only one line? something like;
somecell (:,3).color = {'blue', 'red', 'green'}
thank you!
  1 Comment
Stephen23
Stephen23 on 23 Jan 2022
Edited: Stephen23 on 23 Jan 2022
S = struct('Name', {'bob', 'lea', 'pat'}, 'Birth_year', {1990, 1988, 2021})
S = 1×3 struct array with fields:
Name Birth_year
[S.color] = deal('blue','red','green')
S = 1×3 struct array with fields:
Name Birth_year color
Or from a cell array:
C = {'small', 'large', 'medium'};
[S.tshirtsize] = C{:}
S = 1×3 struct array with fields:
Name Birth_year color tshirtsize

Sign in to comment.

Community Treasure Hunt

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

Start Hunting!