【发布时间】:2020-04-10 01:24:15
【问题描述】:
假设我有一个结构:
MyStruct.a = 12;
MyStruct.b = 22;
MyStruct.c = 32;
我可以修改它,以便根据它们的值对字段进行排序:
MyStruct
c: 32
b: 22
a: 12
orderfields 方法允许基于字段名称或其他结构/单元格数组对结构进行排序,但不能按值排序。
【问题讨论】:
假设我有一个结构:
MyStruct.a = 12;
MyStruct.b = 22;
MyStruct.c = 32;
我可以修改它,以便根据它们的值对字段进行排序:
MyStruct
c: 32
b: 22
a: 12
orderfields 方法允许基于字段名称或其他结构/单元格数组对结构进行排序,但不能按值排序。
【问题讨论】:
% 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 )
【讨论】:
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);
【讨论】: