How to update struct array fields with mutiple values
古いコメントを表示
I am trying to update a field value in a struct array. For example if I have 1*10 struct of A with a field in it called B, I want to replace the following loop with another method:
for iLoop=1:10
A(iLoop).B = iLoop;
end
I tried:
[A.B] = deal(1:10);
And also:
A = setfield(A,num2cell(1:10),'B',num2cell(1:10),(1:10));
But none of them worked (the first method assigns the whole (1:10) vector to each 'B' field in the struct array. The second one crashes). Does anyone know how to make it work?
採用された回答
その他の回答 (3 件)
Andrew Newell
2012 年 3 月 5 日
What timing! It happens that the File Exchange Pick of the Week is the function disperse. If you download disperse and put it on your path, you can use the following command:
[A.B] = disperse(1:10);
3 件のコメント
Mohammad Tabesh
2012 年 3 月 5 日
Bradley Stiritz
2018 年 9 月 15 日
Thank you Andrew! disperse() is just what I needed.
This works perfectly, until you have a field in between.
[A.B] = t{:}; %Great!
[A.B(1).C] = t{:}; % doesn't work
Anyone have a suggestion on how to make it work this way?
1 件のコメント
Mohammad Tabesh
2018 年 2 月 13 日
Mitja M
2018 年 7 月 25 日
I would highly appreciate the solution to the following problem, which I believe is highly related to the previous, but I somehow don't find the appropriate solution.
I have the following variables:
AA, 1×3 struct array with fields: bb
bb, nx6 double array
cc, nx3 double array
n for all three bb and cc arrays is equal to 100 right now
Now I would like to change the fifth column of all three bb arrays to corresponding column in cc array. It can be correctly done using the following for loop:
for i=1:3
AA(i).bb(:,5)=cc(:,i);
end
Is it possible to achieve this without the for loop.
Thank you
1 件のコメント
Mohammad Tabesh
2018 年 7 月 26 日
カテゴリ
ヘルプ センター および File Exchange で Cell Arrays についてさらに検索
製品
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!