File Exchange

image thumbnail

Compare Nested Cell & Struct Arrays Recursively

version 1.0.0.1 (3.74 KB) by Ameya Deoras
Compare two cell or struct arrays and find exactly where they differ

4 Downloads

Updated 01 Sep 2016

View Version History

View License

This package contains two functions CELLEQ and STRUCTEQ which compare two cell arrays or two structures respectively. The cells/structs may internally contain more nested cell and struct arrays which are compared recursively.
Feature summary:
* Support for nested structures/cell arrays
* Return of full stack information on where the two cells/structs differ
* Control for comparison of Function handles within structs/cells
* Control for comparison of NaN properties

Usage:
[iseq, info]= celleq(cell1, cell2, funh2string, ignorenan)
[iseq, info] = structeq(struct1, struct2, funh2string, ignorenan)

* iseq is true if all elements and subelements of the two cells or structs are identical
* info is a structure that contains a field "Reason" which gives you a text stack of why the difference occurred as well as a field "Where" which contains the indices of the element and subelement where the comparison failed.
* (optional) funh2string, if true, instructs function handle comparisons to return true if the string representations of the function handles are the same.
* (optional) ignorenan, if true, will return true for nan == nan. By default both properties are set to false

Example:
>> figure;
>> g = surf(peaks(50));
>> rotate3d
>> hg1 = handle2struct(gcf);
>> set(g,'XDataMode', 'manual');
>> hg2 = handle2struct(gcf);

>> [iseq, info] = structeq(hg1, hg2)
iseq =
0
info =
Reason: [1x137 char]
Where: '(1).properties(1).KeyPressFcn{1}'

>> [iseq, info] = structeq(hg1, hg2, true)
iseq =
0
info =
Reason: [1x188 char]
Where: '(1).children(1).children(1).properties(1).XDataMode'

Cite As

Ameya Deoras (2020). Compare Nested Cell & Struct Arrays Recursively (https://www.mathworks.com/matlabcentral/fileexchange/27542-compare-nested-cell-struct-arrays-recursively), MATLAB Central File Exchange. Retrieved .

Comments and Ratings (4)

Jurgens Wolfaardt

Very Nice. A useful addition would be to output the adresses of all difference cells in 'Where' field - at the moment only the first address is generated.

Luuk Hunnekens

Error in line 61 'Where' should be between quotes I think

Joao Henriques

Very useful!

Joao Henriques

MATLAB Release Compatibility
Created with R2009b
Compatible with any release
Platform Compatibility
Windows macOS Linux

Community Treasure Hunt

Find the treasures in MATLAB Central and discover how the community can help you!

Start Hunting!