Reputation: 2438
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:
MyStruct
c: 32
b: 22
a: 12
The orderfields
methods allow ordering of the struct based on the field name or other structures/cell arrays, but not by value.
Upvotes: 1
Views: 703
Reputation: 36
% 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 )
Upvotes: 2
Reputation: 60484
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);
Upvotes: 1