Creating an array of structures

16 ビュー (過去 30 日間)
Samuel Welker
Samuel Welker 2019 年 1 月 24 日
編集済み: Stephen23 2019 年 1 月 25 日
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."

採用された回答

Image Analyst
Image Analyst 2019 年 1 月 25 日
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 件のコメント
Image Analyst
Image Analyst 2019 年 1 月 25 日
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 2019 年 1 月 25 日
編集済み: Stephen23 2019 年 1 月 25 日
"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.

サインインしてコメントする。

その他の回答 (0 件)

カテゴリ

Help Center および File ExchangeStructures についてさらに検索

タグ

Community Treasure Hunt

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

Start Hunting!

Translated by