I have a.b
, a three element vector. I want to change first 2 elements. Code in the third line does not include the change in second line. For instance, second line responds as:
[2 0 0]
Third line responds as:
[0 3 0]
My code is as follows.
a.b = [0 0 0]
setfield(a,'b',{1},2)
setfield(a,'b',{2},3)
This code is an example. It is to illustrate the problem.
答案 0 :(得分:5)
You can correct it as
a.b = [0 0 0];
a = setfield(a, 'b', {1}, 2);
a = setfield(a, 'b', {2}, 3);
From the help of setfield
:
S = setfield(S,'field',V) sets the contents of the specified field to the value V. This is equivalent to the syntax S.field = V. S must be a 1-by-1 structure. The changed structure is returned.
Without capturing the return value, the first setfield
call will assign the modified struct
to the ans
variable.
Therefore the following code also works, but should be avoided:
a.b = [0 0 0];
setfield(a, 'b', {1}, 2);
a = setfield(ans, 'b', {2}, 3);
答案 1 :(得分:0)
An bit faster alternativ to setfield() would be
a.b(1:2) = [2 3]
or if the index isn't in a sequence
a.b([1 3]) = [2 5]