Creating an array of structures
3 vues (au cours des 30 derniers jours)
Afficher commentaires plus anciens
Samuel Welker
le 24 Jan 2019
Modifié(e) : Stephen23
le 25 Jan 2019
Hey Community,
I am trying to solve a problem where I want to assign a field within a structure to another structure that contains a cell array of structures. For example, lets say I have some structure, pet.dog.type that I want to use to create another structure. For example dog.name1 = pet.dog.type{1}.name, dog.name2 = pet.dog.type{2}.name. Is there a way to create a structure in this way? When I try to do this I keep getting an error "unable to perform assignment because dot indexing is not supported for variables of this type."
0 commentaires
Réponse acceptée
Image Analyst
le 25 Jan 2019
When you say "pet.dog.type{1}.name," you're saying that one of the fields, "grand field" if you'd like rather than a child field, is actually a cell array. So if you did
ca = pet.dog.type{1};
you'd have a cell. ca would be a cell, NOT another structure. Cells cannot take fields. So you cannot do
v = ca.name;
because ca is a cell array and cell arrays do not take dot indexing - they have no field so they can't, it's impossible. So that's why you cannot say pet.dog.type{1}.name.
5 commentaires
Image Analyst
le 25 Jan 2019
Well, I don't know, maybe I was wrong. But I DO know that it would be a lot easier for people to help you if you attached the structure in a .mat file rather than a screenshot.
Stephen23
le 25 Jan 2019
Modifié(e) : Stephen23
le 25 Jan 2019
"When you say "pet.dog.type{1}.name," you're saying that one of the fields, "grand field" if you'd like rather than a child field, is actually a cell array. So if you did"
ca = pet.dog.type{1};
"you'd have a cell. ca would be a cell, NOT another structure."
This bold assertion is not supported by the MATLAB documentation, which clearly states that curly braces refer to the content of the cell array, not to the cell array itself:
The content of that cell could certainly be a structure with a field:
>> pet.dog.type{1}.name = 123;
>> pet.dog.type{2}.name = 222;
>> ca = pet.dog.type{1};
>> ca.name
ans = 123
>> size(ca)
ans = 1 1
>> class(ca)
ans = struct
It is not clear why Image Analyst stated that the content of a cell array must be another cell array. I don't find anything in the documenation to support this, and testing that exact code indicates that the content can indeed be a structure.
Plus de réponses (0)
Voir également
Catégories
En savoir plus sur Structures dans Help Center et File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!