2013-06-10 42 views
5

Tôi nghĩ deal nên làm điều đó nhưng không, và tôi không thể tìm thấy một giải pháp tốt đẹp khác.Giá trị mảng thỏa thuận cho một trường duy nhất của mảng cấu trúc (trong Matlab)

Tôi có một mảng a = 1:2. Tôi muốn đưa các giá trị 1 và 2 vào một mảng cấu trúc b như vậy:

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

Trước sự ngạc nhiên của tôi, [b(1:2).a] = deal(1:2) không đối phó các giá trị, nhưng đặt vector [1 2] vào từng lĩnh vực a cấu trúc b:

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

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

Tôi có thiếu thứ gì đó có cú pháp ở đây không?

Trả lời

3

deal thực hiện những gì được mong đợi. Nó phân phối các đối số đầu vào giữa các đầu ra, và nếu nó chỉ có một đối số (vector 1:2), nó sao chép nó nhiều lần như số các đối số đầu ra. Có thể bạn đang tìm kiếm:

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

Trong trường hợp tổng quát, có thể bạn sẽ phải tạo một mảng tế bào từ các giá trị của bạn (ví dụ sử dụng num2cell) và sử dụng một comma-separated list, ví dụ:

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

Từ gợi ý của Eitan, bạn có thể muốn điều này

b = struct('a',num2cell(a)); 
Các vấn đề liên quan