Array Building using Dynamic Field Reference using an Array of Strings

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

 Réponse acceptée

Something along these lines?
Data.Field1=[1; 2; 3]
Data.Field2=[4; 5; 6]
C = struct2cell(Data)
Output = cat(2,C{:})

2 commentaires

Rajesh Rajaram
Rajesh Rajaram le 10 Mar 2015
Modifié(e) : Rajesh Rajaram le 10 Mar 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
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]

Connectez-vous pour commenter.

Plus de réponses (1)

>> 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

Catégories

Produits

Community Treasure Hunt

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

Start Hunting!

Translated by