Подтвердить что ты не робот

Octave/MATLAB: Как сравнить структуры для равенства?

Как сравнить две структуры для равенства в октавах (или matlab)?

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

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

Ответ 1

Используйте функцию 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

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

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