根据另一个数组排序结构

时间:2018-01-04 05:08:15

标签: arrays matlab sorting structure

我有结构A,它按照数组c的升序排序。

A.a=[2 3 1]
A.b=[5 3 6]
c=[4 2 1]
[c1 c2]=sort(c)
A=A(c2)  % It is not working

显示索引超出矩阵维度错误。

2 个答案:

答案 0 :(得分:3)

我想你想使用structfun

A.a = [2 3 1]
A.b = [5 3 6]
c = [4 2 1]
[~, c2] = sort(c)
A = structfun(@(x) x(c2), A, 'UniformOutput', false)

但似乎所有的矢量长度相同。为什么不将它们存储为矩阵而不是结构?

A = [2 3 1; 5 3 6]
c = [4 2 1]
[~, c2] = sort(c)
A = A(:, c2)

答案 1 :(得分:0)

可能你只需要更改A的格式,这可行

A(1).a = 2; A(1).b = 5;
A(2).a = 3; A(2).b = 3;
A(3).a = 1; A(3).b = 6;
c=[4 2 1];
[c1 c2]=sort(c);
A = A(c2);

如果你不想改变A的结构(但我认为整个练习根本没有意义),那么你需要分别对每个领域进行排序

A.a = A.a(c2);
A.b = A.b(c2);