2012-02-07 19 views
6

Supponiamo che sia stato inizializzato un array di celle con i seguenti valori di struct.Matlab: come convertire l'array di celle di struct in struct array usando l'operatore colon?

% Phone book 
phone_record{1} = struct('name', 'Bob', 'phone', '1233323'); 
phone_record{2} = struct('name', 'Mike', 'phone', '3245524'); 

% How to make such or similar one-liner work? 
% phonebook(:) = phone_record{:} 

% Expected: 
% phonebook(1).name = 'Bob'; 
% phonebook(1).phone= '1233323'; 
% phonebook(2).name = 'Mike'; 
% phonebook(2).phone = '3245524'; 

E 'infatti possibile per raggiungere questo w/o utilizzando cell2struct o per-loop indicizzazione? Si può usare deal o simile?

Nota: se non si conosce la soluzione, si prega di risparmiare "suggerimenti di buona pratica" o simili "agitando a mano".

+0

prega di notare che matrice a matrice non-for-ciclo assigment funziona bene come qui http://stackoverflow.com/questions/8372619/understanding-colon-notation-in-matlab –

+0

E 'probabilmente scarsa forma di dire alla gente cercando per aiutarvi a "per favore, risparmiate" suggerimenti "sulle buone pratiche o simili" agitando a mano "." Raramente la condiscendenza è considerata un incentivo per le persone a prendersi del tempo fuori dal loro tempo per cercare di aiutarti. – Marc

+0

Mi scuso se questo sembra essere scortese, ma è una domanda tecnica e la risposta che ho ottenuto è molto al punto! Sfortunatamente, ci sono membri della comunità che amano fare commenti non necessari ;-) o commenti come "wow, non lo farei se fossi in te ..", "considera l'uso di oop" e simili assurdità non correlate. Ho una domanda tecnica. Il mio punto è che se non si conosce la risposta, si prega di pensare a limitarsi a dire solo qualcosa e risparmiare tempo agli altri utenti che leggono questa base di conoscenza alla ricerca di una soluzione. –

risposta

7

È possibile utilizzare cell2mat:

cell2mat(phone_record) 

ans =

1x2 matrice struct con campi:

nome
telefono

+1

Grazie - mi hai appena salvato una seria quantità di lavoro. – Gdalya

+0

Anche questo mi ha salvato, grazie! –

1

Beh,

phone_book = cat(2, phone_record{ :}) 

effettivamente utilizza l'operatore due punti, e darà lo stesso risultato di cell2mat (phone_record).

Un'altra soluzione non-colon è

cellfun(@(x) x, phone_record).' 

con il vantaggio di trasformare le struct al volo, ad esempio l'aggiunta di campi (mancanti). Qui usiamo l'idendità, ovviamente.