## What is an elegant way to pack and unpack an array of structures to/from a single vector?

Asked by Lamont Granquist

### Lamont Granquist (view profile)

on 7 Jun 2019
Latest activity Commented on by Lamont Granquist

### Lamont Granquist (view profile)

on 7 Jun 2019
What I've got is an array of structures of somewhat complicated data:
data(1).r = [ 1 2 3 ];
data(1).v = [ 4 5 6 ];
data(1).m = 100;
data(2).r = [ 7 8 9 ];
data(2).v = [ 10 11 12 ];
data(2).m = 101;
I'd like to convert this to an array where each structure was packed together. My solution looks like this:
N = length(data);
x = [];
for i=1:N
x = [ x data(i).r data(i).v data(i).m ];
end
Which results in the correct order that I'd like the structures to be packed into the vector:
x =
1 2 3 4 5 6 100 7 8 9 10 11 12 101
Is there a more elegant way to do that packing, and what is the most elegant way to do the reverse operation and unpack that array back into an array of structures?

### madhan ravi (view profile)

on 7 Jun 2019
Edited by madhan ravi

### madhan ravi (view profile)

on 7 Jun 2019

z = struct2cell(data);
x = [z{:}]
data = cell2struct(z,{'r','v','m'}) % reverse

Lamont Granquist

### Lamont Granquist (view profile)

on 7 Jun 2019
That is a lot better. But I want data as a function of an arbitrarily modified x vector, so its missing a step which would be the inverse of x = [z{:}]