MATLAB - 按子结构字段对结构进行排序

时间:2015-05-27 19:20:24

标签: matlab sorting struct

我是一个新的Matlab用户,我对结构有一些疑问。

我的情况是:

我有一个结构P1,它有3个“子结构”(A1,A2,A3),有两个字段(名称和年龄),我想按年龄对我的“子结构”进行排序。所以,我有它:

P1.A1.age = 33
P1.A2.age = 23
P1.A3.age = 31

我想要这个结果:

P1.A2.age = 23
P1.A3.age = 31
P1.A1.age = 33

有什么想法吗?

我尝试使用函数orderfields,但我没有得到我想要的结果。

谢谢!!!

2 个答案:

答案 0 :(得分:1)

首先使用sortstructfun获取排序所需的排列。然后使用orderfields

应用该排列
[~, I] = sort(structfun(@(x) x.age, P1));
P1 = orderfields(P1, I);

答案 1 :(得分:0)

这对你有用吗?

>> [val idx]=sort(arrayfun(@(x) P1.(sprintf('A%d',x)).age,1:3))

val =

    23    31    33


idx =

     2     3     1