Octave / MATLAB: Как сравнить структуры на равенство? - PullRequest
19 голосов
/ 31 марта 2012

Как сравнить две структуры на равенство в октаве (или матлабе)?

Попытка использовать оператор == приводит к:

binary operator `==' not implemented for `scalar struct' by `scalar struct' operations

Ответы [ 2 ]

22 голосов
/ 31 марта 2012

Используйте либо функцию isequal, либо isequalwithequalnans. Пример кода:

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)
2 голосов
/ 31 марта 2012

Я бы просто написал функцию isStructEqual(struct1,struct2), которая выполняет регулярные сравнения для всех атрибутов-членов.Если какое-либо такое сравнение возвращает «ложь» или «0», то немедленно завершите работу и верните «ложь», в противном случае, если оно проходит через весь список атрибутов-членов без этого, возвращает значение «истина».Если структура очень велика, есть способы автоматизировать процесс итерации по полям-членам.

Глядя на центральный обмен файлами, вы можете попробовать этот файл .

...