2012-02-07 37 views
6

Giả sử có một mảng ô được khởi tạo với các giá trị struct sau.Matlab: làm thế nào để chuyển đổi mảng ô của cấu trúc thành mảng cấu trúc bằng cách sử dụng toán tử đại tràng?

% 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'; 

là nó thực sự có thể thực hiện điều này w/o sử dụng cell2struct hoặc cho vòng lập chỉ mục? Có thể sử dụng thỏa thuận hoặc tương tự không?

Lưu ý: nếu bạn không biết giải pháp, hãy bỏ qua gợi ý "thực hành tốt nhất" hoặc "vẫy tay" tương tự.

+0

Xin lưu ý rằng mảng để sắp xếp mảng phi vòng lặp hoạt động độc đáo như ở đây http://stackoverflow.com/questions/8372619/understanding-colon-notation-in-matlab –

+0

Đó có thể là hình thức nghèo để nói với mọi người đang cố gắng để giúp bạn "vui lòng tha thứ cho" thực hành tốt nhất "gợi ý hoặc tương tự" vẫy tay "." Condescension hiếm khi được coi là một khuyến khích để mọi người dành thời gian trong ngày của họ để cố gắng giúp bạn. – Marc

+0

Tôi xin lỗi nếu điều đó có vẻ thô lỗ, nhưng đó là một câu hỏi kỹ thuật và câu trả lời tôi nhận được là rất quan trọng! Thật không may, có những thành viên trong cộng đồng muốn nhận xét không cần thiết ;-) hoặc nhận xét như "wow, tôi sẽ không làm điều đó nếu tôi là bạn ..", "xem xét sử dụng oop sử dụng" và vô nghĩa tương tự không liên quan. Tôi có một câu hỏi kỹ thuật. Quan điểm của tôi là nếu bạn không biết câu trả lời, hãy suy nghĩ về việc hạn chế bản thân chỉ nói điều gì đó và dành thời gian cho những người dùng khác đọc cơ sở tri thức này để tìm kiếm giải pháp. –

Trả lời

7

Bạn có thể sử dụng cell2mat:

cell2mat(phone_record) 

ans =

1x2 struct mảng với các lĩnh vực:

tên
điện thoại

+1

Cảm ơn - bạn vừa lưu cho tôi một số lượng lớn công việc. – Gdalya

+0

Điều này đã cứu tôi, cảm ơn! –

1

Vâng,

phone_book = cat(2, phone_record{ :}) 

không thực sự sử dụng toán tử ruột kết, và sẽ cho kết quả tương tự như cell2mat (phone_record).

Một giải pháp không ruột là

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

với lợi ích của biến đổi cấu trúc một cách nhanh chóng, ví dụ thêm (thiếu) lĩnh vực. Ở đây, chúng tôi sử dụng tính tư tưởng, tất nhiên.

Các vấn đề liên quan