How to access a field of a struct by indexing?
1,326 次查看(过去 30 天)
显示 更早的评论
I have a 1-by-1 struct that possesses 3 fields named B, C, and D. Is there any way to call D by its index (i.e., D is the third field of struct A, so call the third field of struct A without mentioning the field name D) rather than its name (i.e, A.D)?
A.B = 1;
A.C = 2;
A.D = 3;
1 个评论
采纳的回答
Jan
2017-2-26
编辑:Jan
2017-2-26
A_cell = struct2cell(A);
D = A_cell{3}
Keep in mind that the order of the fields of structs is not necessarily constant:
A.B = 1;
A.C = 2;
A.D = 3;
B.B = 1;
B.D = 3;
B.C = 2;
isequal(A, B) % >> TRUE!
4 个评论
Richard Crozier
2019-8-1
James Tursa
2019-8-1
struct2cell creates shared-data-copies of the field variables. So, while there is overhead involved in creating the variable header info, the data itself is not copied.
更多回答(1 个)
Guillaume
2017-2-26
Yes, there is a way to get the nth field directly:
fns = fieldnames(A);
A.(fns{3})
But be aware that the order of the fields depends solely on the order in which they were created. As Jan pointed out, two structures may be indentical, yet have different field order.
Usually, you would only access fields by their index when you're doing some structure metaprogramming
5 个评论
Vaishnavi
2023-12-19
To add on to this question, can someone explain why A.(subsref(fieldnames(A),substruct('{}',{:}))) would not work?
Voss
2023-12-19
@Vaishnavi: One reason that doesn't work is that you need single quotes around the colon in substruct. But even then, it may not do what you expect. Here's what it does (gets the value of the first field of A):
A = struct('field1',1,'field2',2)
A.(subsref(fieldnames(A),substruct('{}',{':'})))
In order to know whether that "works", one would need to know what you expected it to do.
另请参阅
类别
在 Help Center 和 File Exchange 中查找有关 Structures 的更多信息
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!