필터 지우기
필터 지우기

Is it possible to concatenate sub-structures within structures into single variables?

조회 수: 3 (최근 30일)
I am working with multiple structures that contain several sub-structures, each containing numerous fields. The sub-structures and fields all share the same naming convention for each of the separate "top-level" structures. For example;
Struct1.A.B.data = [5000 x 1 single];
Struct2.A.B.data = [3000 x 1 single];
I'd like to append the variables for each of the subsequent structures into the first one without creating additional structures. For example, after appending all of the additional data, structure 1 would become;
Struct1.A.B.data = [8000 x 1 single] instead of Struct1.A.B.data = [2 x 1 struct]
I'm currently doing this manually by concatenating each field individually and it works but requires many lines of code for large structures, see below.
Struct1.A.B.data = [Struct1.A.B.data Struct2.A.B.data];
This repeats for sub-structures A through Z and sub-structures B through Z, which is very tedious.
Is there a better way of acheiving this?
Side note, I tried using the method described in the question below but this creates the additional structures mentioned above instead of adding the data directly to the variables.

채택된 답변

Matt J
Matt J 2024년 1월 9일
편집: Matt J 2024년 1월 9일
A double nested loop could be used, e.g.,
for A=string(fieldnames(Struct1))'
for B=string(fieldnames(Struct1.(A)))'
Struct1.(A).(B).data = [Struct1.(A).(B).data Struct2.(A).(B).data];
end
end
  댓글 수: 3
Matt J
Matt J 2024년 1월 10일
편집: Matt J 2024년 1월 10일
"Dot indexing is not supported for variables of this type."...Any ideas on what is causing this error?
Yes, but there is no reason to be guessing. You should trap the error with dbstop and see exactly what the variable type is.
The solution assumes all fields of Struct1 and Struct2 are themselves structs. If that is violated, it would explain the error.
Jack Smith
Jack Smith 2024년 1월 10일
I forgot that the sub-structures A and B contained some variables that were not structures, such as strings. I've added an if statement to the inner loop to skip these cases which has fixed the problem.
Thanks for all your help.

댓글을 달려면 로그인하십시오.

추가 답변 (0개)

카테고리

Help CenterFile Exchange에서 Variables에 대해 자세히 알아보기

제품


릴리스

R2022a

Community Treasure Hunt

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

Start Hunting!

Translated by