Nesting depth and the error "Expected one output from a curly brace or dot indexing expression, but there were x results."
4 ビュー (過去 30 日間)
古いコメントを表示
Consider this toy example:
a(1).x.y=1
a(2).x.y=2
[a.x.y]
Why does this produce the infamous error
Expected one output from a curly brace or dot indexing expression, but there were 2 results.
..instead of just listing all values from across all indexed structure elements, as in this other example where the nesting is at level 2 instead of level 3:
a(1).x=1
a(2).x=2
[a.x]
>> [a.x]
ans =
1 2
採用された回答
Bruno Luong
2022 年 8 月 19 日
編集済み: Bruno Luong
2022 年 8 月 19 日
a work around if you insist on oneline
a(1).x.y=1
a(2).x.y=2
axy = [struct([a.x]).y]
0 件のコメント
その他の回答 (1 件)
Jan
2022 年 8 月 19 日
R2022a creates a different error:
a(1).x.y=1;
a(2).x.y=2;
[a.x.y]
"instead of just listing all values from across all indexed structure elements"
Think twice. [a.x] is an array already with 2 elements. The dot operator cannot handle an array as input, but a scalar struct only. This is plausible. Consider, that there is no logical decision for the dimensions of the output. It is also unclear, what you call "just listing all values".
3 件のコメント
Image Analyst
2022 年 8 月 19 日
Is there a bracket/brace/parentheses solution to this, or is the only way a simple but intuitive for loop
a(1).x.y=1;
a(2).x.y=2;
all_y = zeros(numel(a), 1);
for k = 1 : numel(a)
all_y(k) = a(k).x.y;
end
or possibly a cryptic call to structfun or some other weird function
Stephen23
2022 年 8 月 19 日
"The dot operator cannot handle an array as input, but a scalar struct only."
???
a(1).x.y=1;
a(2).x.y=2;
tmp = [a.x] % array struct, not scalar struct
[tmp.y] % dot indexing accepts an array without any problem
参考
カテゴリ
Help Center および File Exchange で Matrix Indexing についてさらに検索
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!