Array Building using Dynamic Field Reference using an Array of Strings

1 visualización (últimos 30 días)
This is an example of what I am trying to do: Data.Field1=[1; 2; 3];
Data.Field2=[4; 5; 6];
Output=Data.({'Field1'; 'Field2'}) - I know this gives an error, but I want to do something similar
Answer (Desired) Output= [1 4; 2 5; 3 6]
I know I can do it using a for loop for field and build the Output. I was wondering if there is a more elegant way to it.
Many thanks in advance

Respuesta aceptada

Jos (10584)
Jos (10584) el 10 de Mzo. de 2015
Something along these lines?
Data.Field1=[1; 2; 3]
Data.Field2=[4; 5; 6]
C = struct2cell(Data)
Output = cat(2,C{:})
  2 comentarios
Rajesh Rajaram
Rajesh Rajaram el 10 de Mzo. de 2015
Editada: Rajesh Rajaram el 10 de Mzo. de 2015
This is awesome!! Thank you. This definitely answers my initial question.
I have a follow up question: What if Data had a lot more fields say Field001...Field100 and I want to collate only some of the fields into an array?
Req_Field = {'Field001'; 'Field010'; 'Field011'..'Field030'}
- this list could change in the future and hence don't want to hard code each field name in my extraction
Thanks again
Jos (10584)
Jos (10584) el 14 de Mzo. de 2015
Do not set up your data structure like that. Use arrays:
Data.Field(1).values = [1 2 3]
Data.Field(2).values = [4 5 6]

Iniciar sesión para comentar.

Más respuestas (1)

James Tursa
James Tursa el 10 de Mzo. de 2015
>> Data.Field1 = [1;2;3]
Data =
Field1: [3x1 double]
>> Data.Field2 = [4;5;6]
Data =
Field1: [3x1 double]
Field2: [3x1 double]
>> Data.Field3 = 1:4
Data =
Field1: [3x1 double]
Field2: [3x1 double]
Field3: [1 2 3 4]
>> Fields = {'Field1','Field2'}
Fields =
'Field1' 'Field2'
>> n = numel(Fields)
n =
2
>> f = @(y,x)(y.(x))
f =
@(y,x)(y.(x))
>> Datas = cell(1,n);
>> Datas(:) = {Data}
Datas =
[1x1 struct] [1x1 struct]
>> cell2mat(cellfun(f,Datas,Fields,'UniformOutput',false))
ans =
1 4
2 5
3 6

Categorías

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

Productos

Community Treasure Hunt

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

Start Hunting!

Translated by