2012-03-31 30 views

Trả lời

19

Sử dụng chức năng isequal hoặc isequalwithequalnans. Mã ví dụ:

s1.field1 = [1 2 3]; 
s1.field2 = {2,3,4,{5,6}}; 
s2 = s1; 
isequal(s1,s2) %Returns true (structures match) 

s1.field3 = [1 2 nan]; 
s2.field3 = [1 2 nan]; 
isequal(s1, s2)    %Returns false (NaN ~= NaN) 
isequalwithequalnans(s1, s2) %Returns true (NaN == NaN) 

s2.field2{end+1}=7; 
isequal(s1,s2)    %Returns false (different structures) 

isequal(s1, 'Some string') %Returns false (different classes) 
+5

@ user1131467: Nếu các cấu trúc chứa 'NaN',' isequal' có thể trả về 'false' mặc dù chúng ta sẽ xem xét các cấu trúc tương tự. Vì vậy, tôi đề nghị sử dụng 'isequalwithequalnans' thay vì' isequal'. – Jonas

+0

@ Jonas Đó là một điểm tốt. Tôi đã chỉnh sửa câu trả lời. – Pursuit

+3

Trong R2012b sử dụng ['isequaln'] (http://www.mathworks.com/help/matlab/ref/isequaln.html). –

2

Tôi chỉ muốn viết một hàm isStructEqual(struct1,struct2) mà thực hiện so sánh thường xuyên trên tất cả các thuộc tính thành viên. Nếu bất kỳ sự so sánh nào như vậy trả về 'false' hoặc '0', thì ngay lập tức thoát và trả về 'false', nếu không nó sẽ đi qua danh sách các thuộc tính thành viên mà không xảy ra, trả về true. Nếu cấu trúc cực kỳ lớn, có nhiều cách để tự động hóa quá trình lặp qua các trường thành viên.

Nhìn vào trao đổi tệp trung tâm, bạn có thể thử this file.

+0

Có bất kỳ lý do nào không được triển khai như một phần của ngôn ngữ hoặc thư viện chuẩn không? Nó có vẻ như chức năng khá cơ bản. –

+0

Có lẽ chỉ vì họ không muốn hỗ trợ một so sánh phức tạp cho các biến cấu trúc khác nhau. Tôi không chắc chắn tất cả những gì có thể là một thuộc tính thành viên, nhưng nếu những thứ như các biến tượng trưng, ​​hoặc các đối tượng cụ thể của hộp công cụ được thêm vào như các trường struct. Nếu người khác không có hộp công cụ phù hợp, nó có thể gây ra vấn đề, và đó có thể chỉ là một nhức đầu ưu tiên thấp cho những người dùng Mathworks. Tôi không phải là một fan hâm mộ lớn của Mathworks vì những thứ như thế. Nếu bạn có tùy chọn để làm việc trong một ngôn ngữ khác và muốn, hãy xem xét Python với NumPy. – ely

+1

Octave bắt buộc không may. Nếu tôi có cách của tôi, tôi sẽ sử dụng C++, stl, có thể tăng và một thư viện toán học sci như Armadillo: http://arma.sourceforge.net/ –

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