Octave/MATLAB: Как сравнить структуры для равенства?
Как сравнить две структуры для равенства в октавах (или matlab)?
Попытка использования оператора == дает:
binary operator `==' not implemented for `scalar struct' by `scalar struct' operations
Ответы
Ответ 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. Если структура чрезвычайно велика, есть способы автоматизировать процесс итерации по полям членов.
Рассматривая центральный обмен файлами, вы можете попробовать этот файл.