How to create an empty struc with fields of a given struct?
Show older comments
I have a struct A with many fields:
A.a
A.b
...
A.z
Now I want to create a struct B, with the same fields:
B.a
B.b
...
B.z
With
B=struct(A)
B has also the same size as A, and all values of A are also included. But I want to have an empty struct with 0x1 dimension.
Background: in a loop I want to sort out some entries of A, that fit a certain criteria and write it into B. If I do
B=struct([])
B(n)=A(m)
then the structs do not match. Therefore I want to create B in advance and then assign it.
1 Comment
Sara
on 18 Mar 2014
A is not an array, so I don't see how you can do B(n)=A(m). Do you mean you want to do something like: 1) B.f = A.a, or 2) B.a(n) = A.b(m)?
Accepted Answer
More Answers (3)
The simplest and most efficient solution to the question posed is to just use indexing, e.g.:
>> A(1).x = 1;
>> A(1).y = 2;
>> A(2).x = 3;
>> A(2).y = 4
A =
1x2 struct array with fields:
x
y
>> B = A([])
B =
0x0 struct array with fields:
x
y
Using indexing we can also trivially obtain exactly the size requested in the original question:
>> B = A([],1)
B =
0x1 struct array with fields:
x
y
3 Comments
Joe V
on 17 Apr 2020
Brilliant! Recommending MathWorks include this in the MATLAB documentation.
Aryaman Mohapatra
on 30 Mar 2021
^
Emily T. Griffiths
on 14 Oct 2021
Love the simplicity of this. Thanks!
Ben Oeveren
on 17 Aug 2018
Edited: Ben Oeveren
on 17 Aug 2018
I often use
fields = {'field1','field2','field2'}
c = cell(length(fields),1);
s = cell2struct(c,fields);
2 Comments
Donghoon Yeo
on 23 May 2019
Edited: Donghoon Yeo
on 23 May 2019
Easy and perfectly works for me
KAE
on 20 Dec 2019
I think the line should be
fields = {'field1','field2','field3'}
So you get
s =
struct with fields:
field1: []
field2: []
field3: []
Binxu
on 22 Apr 2020
Actually I just fond a super simple way similar to Stephen Cobeldick 's answer
It seems to me that repmat is a super useful tool for initializing many data structure.
summary =
struct with fields:
anova_F: 1.0172
anova_p: 0.4279
anova_F_bsl: 1.0156
anova_p_bsl: 0.4335
t: 8.7424
t_p: 5.9749e-18
t_CI: [2×1 double]
stats = repmat(summary,0,0);
>> repmat(summary,0,0)
ans =
0×0 empty struct array with fields:
anova_F
anova_p
anova_F_bsl
anova_p_bsl
t
t_p
t_CI
1 Comment
Stephen23
on 22 Apr 2020
+1 neat solution
Categories
Find more on Structures in Help Center and File Exchange
Community Treasure Hunt
Find the treasures in MATLAB Central and discover how the community can help you!
Start Hunting!