2013-06-10 8 views
5

Ich dachte, deal sollte es tun, aber es tut nicht, und ich kann nicht finden, eine andere nette Lösung.Deal-Array-Werte zu einem einzelnen Feld eines Struktur-Array (in Matlab)

Ich habe ein Array a = 1:2. Ich möchte die Werte 1 und 2 in eine Struktur-Array setzen b etwa so:

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

Zu meiner Überraschung [b(1:2).a] = deal(1:2) nicht die Werte beschäftigen, sondern bringt den Vektor [1 2] in jedes Feld a der Struktur b:

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

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

Fehle ich etwas mit Syntax hier?

Antwort

3

deal tut, was es zu tun erwartet. Es verteilt die Eingabeargumente auf die Ausgaben und wenn es nur ein Argument hat (den Vektor 1:2), repliziert es es so oft wie die Anzahl der Ausgabeargumente. Sie wurden wahrscheinlich auf der Suche nach:

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

Im allgemeinen Fall, werden Sie wahrscheinlich ein Zellenfeld aus Ihren Werten erstellen (zB mit num2cell) und ein comma-separated list verwenden, zum Beispiel:

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

Vom Hauch von Eitan, können Sie diese

b = struct('a',num2cell(a)); 
wollen
Verwandte Themen