2013-06-10 18 views
5

Ho pensato che lo deal dovrebbe farlo ma non lo è, e non riesco a trovare un'altra soluzione piacevole.Distribuire i valori degli array a un singolo campo di un array di strutture (in Matlab)

Ho un array a = 1:2. Vorrei mettere i valori 1 e 2 in un array di strutture b in questo modo:

b(1).a = 1 
b(2).a = 2 

Con mia grande sorpresa, [b(1:2).a] = deal(1:2) non tratta i valori, ma mette il vettore [1 2] in ogni campo a della struttura b:

>> b(1) 
ans = 
    a: [1 2] 

>> b(2) 
ans = 
    a: [1 2] 

Mi manca qualcosa con la sintassi qui?

risposta

3

deal fa ciò che si prevede di fare. Distribuisce gli argomenti di input tra gli output e, se ha un solo argomento (il vettore 1:2), lo replica tante volte quante il numero di argomenti di output. Probabilmente si stava cercando:

[b(1:2).a] = deal(1, 2); %// or simply [b.a] = deal(1, 2) 

Nel caso generale, probabilmente dovrete creare un array di celle dai vostri valori (ad esempio utilizzando num2cell) e utilizzare un comma-separated list, per esempio:

C = num2cell(v);   %// v stores the values 
[b.a] = deal(C{:}); 
0

Dal accenno di Eitan, si consiglia questo

b = struct('a',num2cell(a)); 
Problemi correlati