Consider the following loop:
values = [2 5 6 4 8 9 10 5 15 7]
for i=1:10
arr(i).myfield = values(i);
end
How can this be done without loop?
Thank you.

 採用された回答

Walter Roberson
Walter Roberson 2015 年 12 月 8 日

1 投票

T = struct('myfield', num2cell(values));
arr(1:length(T)) = T;
In the special case that arr does not already exist, it can be done with the one line
arr = struct('myfield', num2cell(values));

4 件のコメント

Durga Lal Shrestha
Durga Lal Shrestha 2015 年 12 月 8 日
Thanks Walter. But arr already exists with other fields. For example
arr(1).myfield1=10;
arr(2).myfield1=20;
arr(3).myfield1=30;
And I want to add another field myfield2 with values as below
values = [100 200 300];
for i=1:3
arr(i).myfield2 = values(i);
end
When I used your code
T = struct('myfield2', num2cell(values));
arr(1:length(T)) = T;
I got the following error message
Subscripted assignment between dissimilar structures.
Walter Roberson
Walter Roberson 2015 年 12 月 8 日
T = num2cell(values);
[arr(1:10).myfield2] = T{:};
It is necessary to use two lines for this.
Durga Lal Shrestha
Durga Lal Shrestha 2015 年 12 月 8 日
Thanks. It works now.
Somaye Hamedi Bazaz
Somaye Hamedi Bazaz 2018 年 11 月 24 日
Great!!!!!!!!!!!! thank you

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

ヘルプ センター および File Exchange で Multidimensional Arrays についてさらに検索

Community Treasure Hunt

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

Start Hunting!

Translated by