根据值对结构中的字段进行排序

时间:2019-12-17 14:05:34

标签: matlab sorting struct

说我有一个结构体:

MyStruct.a = 12;
MyStruct.b = 22;
MyStruct.c = 32;

我可以对其进行修改,以便根据其值对字段进行排序:

MyStruct
c: 32
b: 22
a: 12

orderfields方法允许根据字段名称或其他结构/单元格数组对结构进行排序,但不能按值排序。

2 个答案:

答案 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);