说我有一个结构体:
MyStruct.a = 12;
MyStruct.b = 22;
MyStruct.c = 32;
我可以对其进行修改,以便根据其值对字段进行排序:
MyStruct
c: 32
b: 22
a: 12
orderfields
方法允许根据字段名称或其他结构/单元格数组对结构进行排序,但不能按值排序。
答案 0 :(得分:2)
% 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 )
答案 1 :(得分:0)
orderfields
具有a syntax的位置,它根据排列数组排序。 second output of sort
是一个排列数组。这样的事情应该起作用:
[~,I] = sort(cell2mat(struct2cell(MyStruct)));
I = flip(I); % reverse ordering to get larger elements first
MyStruct = orderfields(MyStruct,I);