MATLAB Answers


How do I add a value to a field in each element of a struct array?

Asked by Brandon Kuczenski on 29 Apr 2014
Latest activity Commented on by Image Analyst
on 29 Apr 2014
Say I have a struct array with a numeric field:
>> a=struct('bar',{47 52})
I want to increment that field across each element of the array, something like the following:
>> [] = [] + 1; % this fails
The nearest I can figure out is the following, which is cumbersome:
>> inc = num2cell([]+1);
>> [] = inc{:};
Is there a way to do this without creating an intermediate variable? Thanks in advance.


Sign in to comment.


1 Answer

Answer by Image Analyst
on 29 Apr 2014

Well why are you messing around with cell arrays? Why make it way more complicated than it needs to be??? I don't see any reason for a cell array. I think you need to read the FAQ:
Try using just regular numerical arrays:
% Create structure.
a=struct('bar',[47 52]) % Report to command window.
% Add 1 = % Report to command window.
In the command window:
a =
bar: [47 52]
ans =
47 52
a =
bar: [48 53]
ans =
48 53


Your 'a' is not a struct array- it is a struct with one field whose contents are an array. In my version, a(1).bar = 47, a(2).bar=52, and gives an error.
Sorry, I misunderstood. A fast, straightforward and intuitive solution is to simply use a for loop:
for k = 1:length(a)
a(k).bar = a(k).bar+1;
Don't believe the hype about a for loop being slow. It's not. Assuming you have less than several million structures in the array, it should be very fast.

Sign in to comment.