Creating an array of structures

2 visualizaciones (últimos 30 días)
Samuel Welker
Samuel Welker el 24 de En. de 2019
Editada: Stephen23 el 25 de En. de 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."

Respuesta aceptada

Image Analyst
Image Analyst el 25 de En. de 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 comentarios
Image Analyst
Image Analyst el 25 de En. de 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
Stephen23 el 25 de En. de 2019
Editada: Stephen23 el 25 de En. de 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.

Iniciar sesión para comentar.

Más respuestas (0)

Categorías

Más información sobre Structures en Help Center y File Exchange.

Etiquetas

Community Treasure Hunt

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

Start Hunting!

Translated by