Matlab:如何使用另一个向量按其中一个列对结构进行排序

Posted

技术标签:

【中文标题】Matlab:如何使用另一个向量按其中一个列对结构进行排序【英文标题】:Matlab: How to sort a struct by one of its columns using another vector 【发布时间】:2020-03-12 17:07:10 【问题描述】:

如何以其中一个列等于某个向量的方式对结构进行排序?下面是一个例子,说明了我的意思。

我有以下结构和向量:

% What I have:
my_struct = struct('value1', 4, 2, 1, 'letters', 'CD', 'AB', 'XY', 'value2', 5, 3, 1);
% Looks like:
% 4   'CD'    5
% 2   'AB'    3
% 1   'XY'    1

my_cell_array = 'CD', 'XY', 'AB';
% Looks like:
% 'CD' 'XY' 'AB'

现在我尝试以第二列与my_cell_array 相同的顺序对结构进行排序:

% What I try:
[~, my_order_struct] = sort(my_struct(:).letters);
% Gives:
% 2 1 3

my_struct_ordered_alphabetically = my_struct(my_order_struct);
% Gives:
% 2   'AB'    3
% 4   'CD'    5
% 1   'XY'    1

my_struct_ordered = my_struct_ordered_alphabetically(my_order_cell);
% Should give:
% 4   'CD'    5
% 1   'XY'    1
% 2   'AB'    3

但是,我需要为我的代码的最后一行找到 my_order_cell。排序在这里并不能完全解决问题:

[~, my_order_cell] = sort(my_cell_array);
% Gives me: 3 1 2 (vector that can be used to sort the cell array alphabetically)
% What I need: 2 3 1 (vector with the alphabetical order of the cell array elements)

因此,我此时的确切问题是:如何提取单元格数组的字母顺序(2 3 1 而不是 3 1 2)?

我必须从上述数据类型(结构和元胞数组)开始,但是,如果有帮助,我愿意将它们转换为任何其他格式。

【问题讨论】:

您的问题是什么?看起来您已经使用sort 找到了解决方案。相关问题:***.com/questions/1497484/… @Daniel 感谢您提出相关问题,这对我有很大帮助。我现在进行了编辑以澄清我的确切问题。 【参考方案1】:

我不得不承认现在的答案很琐碎:

[~, my_order_cell] = sort(my_cell_array);
% Gives me: 3 1 2 (vector that can be used to sort the cell array alphabetically)

[~, my_order_cell2] = sort(my_order_cell);
% Gives me: 2 3 1 (vector with the alphabetical order of the cell array elements)

【讨论】:

很好的解决方案。你也可以使用ismember,它也返回索引。

以上是关于Matlab:如何使用另一个向量按其中一个列对结构进行排序的主要内容,如果未能解决你的问题,请参考以下文章

使用 MATLAB mex 将向量与另一个向量分配时出现分段错误

在遵循特定结构的同时按列对多索引进行排序

MATLAB:获取向量结构的最小 x 值

如何在android中按数值列对listview项目进行排序

基于列对二维向量数组进行排序

如何按列对二维数组(锯齿状)进行排序[重复]