2013-06-10 7 views
5

Myślałem, że powinien to zrobić deal i nie mogę znaleźć innego fajnego rozwiązania.Uszereguj wartości tablicowe do pojedynczego pola tablicy struktur (w Matlab)

Mam tablicę a = 1:2. Chciałbym umieścić wartości 1 i 2 do tablicy struktury b tak:

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

Ku mojemu zaskoczeniu [b(1:2).a] = deal(1:2) nie dotyczy wartości, ale stawia wektor [1 2] w każdej dziedzinie a struktury b:

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

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

Czy brakuje mi czegoś o składni tutaj?

Odpowiedz

3

deal robi to, co oczekuje się od użytkownika. Rozdziela on argumenty wejściowe między wyjściami, a jeśli ma tylko jeden argument (wektor 1:2), replikuje go tyle razy, ile wynosi liczba argumentów wyjściowych. To prawdopodobnie szukasz:

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

w ogólnym przypadku, prawdopodobnie będziesz musiał stworzyć tablicę komórek z wartościami (np korzystających num2cell) i użyć comma-separated list, na przykład:

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

z nutą Eitan, może chcesz to

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