【问题标题】:Sort structure according another array根据另一个数组对结构进行排序
【发布时间】:2018-01-04 05:08:15
【问题描述】:

我有结构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

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

【问题讨论】:

  • 您要对结构体A 还是数组A.aA.b 进行排序?在我看来,你打算做后者。
  • 结构A要排序
  • 所以你想改变结构成员的顺序?在我看来,A 是一个包含一个元素 A(1) 的数组。 A(2) 不存在。有什么要排序的?但是,A.a 是一个向量,您可以使用A.a(c2) 对其元素重新排序。你确定这不是你需要的吗?
  • Strct A 由向量 a 和 b 组成。通过对结构 A 进行排序,我的意思是要对其所有向量进行排序。在这种情况下,有两个向量。它可能包含更多数量的向量,那么如何通过简单的编码来完成。
  • 看到了吗?那是一个完全不同的问题。 “对结构进行排序”与“对结构中的所有向量进行排序”。我并不是要对语言不屑一顾,而是要向您展示准确地提出您的问题是获得答案的重要部分。

标签: arrays matlab sorting structure


【解决方案1】:

我想你想用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)

【讨论】:

  • structfun 是我所期待的。谢谢,建议使用此功能。
【解决方案2】:

可能你只需要更改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);

【讨论】:

  • 感谢您的回复。没有时,这是一种简单的方法。的数组很少。 structfun 更合适。
猜你喜欢
  • 1970-01-01
  • 2015-08-05
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-07-13
  • 2013-11-10
  • 1970-01-01
相关资源
最近更新 更多