You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

如何依据元胞数组B的顺序对结构体数组A进行排序?

解决结构体数组按指定元胞数组顺序排序的问题

嘿,这个需求其实很容易实现,咱们直接用MATLAB内置的ismember函数就能搞定,不用折腾复杂的循环~

先回顾下你的原始数据:
你生成结构体数组A的代码:

number=[1 3 2 4]; 
name={'dog' 'cat' 'fish' 'monkey'}; 
age=[7 9 2 13]; 
A=[]; 
for i=1:4 
    A(i).number=number(i); 
    A(i).name=name{i}; 
    A(i).age=age(i); 
end

指定顺序的元胞数组B:

B={'cat' 'fish' 'monkey' 'dog'}

具体解决方案

只需要三步就能完成排序:

  • 先把结构体数组A里的所有name字段提取成一个独立的元胞数组,方便后续匹配;
  • ismember函数找到B中每个元素在A的name列表里对应的位置索引;
  • 用这个索引数组重新排列A,得到顺序和B完全一致的新结构体数组。

完整代码如下:

% 提取A的所有name到元胞数组
A_names = {A.name};

% 找到B中每个元素在A_names中的位置索引
[~, sort_idx] = ismember(B, A_names);

% 按索引重新排序A
sorted_A = A(sort_idx);

验证结果

你可以输出sorted_A.name看看,结果会和B完全一致:

>> sorted_A.name
ans =
  1×4 cell array
    {'cat'}    {'fish'}    {'monkey'}    {'dog'}

原理很简单:ismember(B, A_names)的第二个输出参数sort_idx,就是B中每个元素在A的name列表里的位置编号,用这个编号去索引原结构体数组A,自然就能得到符合B顺序的排序结果啦~

内容的提问来源于stack exchange,提问作者dalleaux

火山引擎 最新活动