Say I have a struct:
MyStruct.a = 12;
MyStruct.b = 22;
MyStruct.c = 32;
Can I modify it so that the fields are ordered based on their value:
orderfields
has a syntax where it orders based on a permutation array. The second output of sort is a permutation array. Something like this should work:
[~,I] = sort(cell2mat(struct2cell(MyStruct)));
I = flip(I); % reverse ordering to get larger elements first
MyStruct = orderfields(MyStruct,I);
% Define initial structure:
myStruct.a = 12;
myStruct.b = 22;
myStruct.c = 32;
% Find desired order of values, rather than fieldnames:
[ ~,sortIdx ] = sort( structfun( @(x) x, myStruct ), 'descend' );
% Apply orderfields():
mySortedStruct = orderfields( myStruct, sortIdx )