extract structure array value
2 ビュー (過去 30 日間)
古いコメントを表示
Hi all
I have nested structure like below,
MyData(1).User.Id = 5;
MyData(1).User.Name = 'XXX';
MyData(2).User.Id = 7;
MyData(2).User.Name = 'XXX';
MyData(3).User.Id = 8;
MyData(3).User.Name = 'XXX';
MyData(4).User.Id = 9;
MyData(4).User.Name = 'XXX';
MyData(5).User.Id = 75;
MyData(5).User.Name = 'XXX';
MyData(6).User.Name = 45;
MyData(6).User.data = 'XXX';
I need output out = [5,7,8,9,75,45]
without loop i need to output.
if any body know inbuild command for that.
Thanks in advance.
2 件のコメント
Stephen23
2020 年 9 月 24 日
After fixing the mismatching fieldnames, you can use comma-separated lists like this:
>> tmp = [MyData.User];
>> out = [tmp.Id]
out =
5 7 8 9 75 45
採用された回答
Rik
2020 年 9 月 24 日
編集済み: Rik
2020 年 9 月 24 日
You can hide the loop with arrayfun, but be aware that a good loop is always better than cellfun or arrayfun. You should ask yourself why you want to avoid loops.
MyData(1).User.Id = 5;
MyData(1).User.Name = 'XXX';
MyData(2).User.Id = 7;
MyData(2).User.Name = 'XXX';
MyData(3).User.Id = 8;
MyData(3).User.Name = 'XXX';
MyData(4).User.Id = 9;
MyData(4).User.Name = 'XXX';
MyData(5).User.Id = 75;
MyData(5).User.Name = 'XXX';
MyData(6).User.Id= 45;%correcting assumed typo
MyData(6).User.Name= 'XXX';%correcting assumed typo
arrayfun(@(s) s.User.Id,MyData)
It is also possible to avoid arrayfun:
tmp=[MyData.User];[tmp.Id]
%R2020a and later:
[horzcat(MyData.User).Id]
0 件のコメント
その他の回答 (2 件)
Fangjun Jiang
2020 年 9 月 24 日
%% correct data first
MyData(6).User.Id= 45;
MyData(6).User.Name= 'XXX';
%% then
A=struct2array(MyData);
result=[A.Id];
0 件のコメント
参考
カテゴリ
Help Center および File Exchange で Structures についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!