数组排序的基础条件

17日视图(30天)
板
2023年5月17日
评论道: 2023年5月18日
晚上好,
更正:变量是细胞数组*
我想安排以下变量:
tmp = {“1 e2”,“1 h4”,“1 t0”,' 3 g2 ',' 3 g3 ',' 3 g4 ',“3 q0”,' 3 q1 ',' 3 q2 '};
letter_list = {“t”,“问”,“e”,‘g’,“h”,“我”,“j”}
letter_list =1×7单元阵列
{' t '}{‘问’}{“e”} {‘g’} {' h '}{“我”}{' j '}
我希望找到一个方法变量tmp到所需的数组进行排序如下:
desired_var = {“1 t0”,“1 e2”,“1 h4”,' 3 q2 ',' 3 q1 ',“3 q0”,' 3 g4 ',' 3 g3 ',' 3 g2 '};
阐述
  1. 行与tmp 1(: 1) = = 1是按各自的第二列索引的顺序排序,他们letter_list出现出现的顺序。
  2. 行与列1和2等效组,这样所有3 q行进行分组,然后命令基于第三列,最高的数量下降
  3. 然后把这1和2组合成一个变量来产生desired_var

接受的答案

骑自行车的人
骑自行车的人 2023年5月18日
%的输入数据
tmp = {“1 e2”,“1 h4”,“1 t0”,' 3 g2 ',' 3 g3 ',' 3 g4 ',“3 q0”,' 3 q1 ',' 3 q2 '};
letter_list = {“t”,“问”,“e”,‘g’,“h”,“我”,“j”};
%得到第一个数字(这将按升序排序)
num1 = cellfun (@ (x) (str2double (x (1))), tmp) ';
%得到第二个字符,发现根据letter_list排序顺序
char2 = cellfun (@ (x) (x (2)), tmp);
[~,num2] = ismember (char2 letter_list);
%得到第三个数字(这将在降序排序)
num3 = cellfun (@ (x) (str2double (x (3))), tmp) ';
%的排序顺序通过将三个向量矩阵进行排序
[~,sortingIndex] = sortrows ([num1, num2 num3], (1 2 3) {“提升”,“提升”,“下”});
%对tmp应用排序
desired_var = tmp (sortingIndex)
desired_var =1×9单元阵列
{' 1 t0} {' 1 e2} {' 1 h4} {3 q2的}{3 q1的}{3 q0的}{3 g4的}{3 g3的}{3 g2的}
3评论
板
2023年5月18日
嗨,艾伦,
上面您的扩展到你最初的回答也是一个解决方案!谢谢你的帮助!

登录置评。

答案(1)

艾伦
艾伦 2023年5月18日
您可以执行排序到指定的顺序使用 分类 数组中。要做到这一点,你需要调整你的原始变量,提取你的来信 tmp 变量。
我也让你最初的假设 tmp letter_list 变量是cell-arrays (culy-brackets {}), 特征向量,特征向量中给数组大小相同。我还假设中的元素 letter_list 数组已经在所需的排序顺序。
tmp = {“1 e2”,“1 h4”,“1 t0”,' 3 g2 ',' 3 g3 ',' 3 g4 ',“3 q0”,' 3 q1 ',' 3 q2 '};
letter_list = {“t”,“问”,“e”,‘g’,“h”,“我”,“j”};
接下来,秘密 tmp 单元阵列为特征向量数组的第二个元素向量可以很容易地提取每个字符(假设第二个元素总是会信)。
%转换为字符数组
tmpList = char (tmp);
tmpList
% tmpList =
% 9×3字符数组
% 1 e2的
% 1 h4的
% 1 t0的
% 3 g2的
% 3 g3的
% ' 3 g4 '
% 3 q0的
% 3 q1的
% ' 3 q2 '
%提取字符数组的第二列的来信
信= tmpList (:, 2);
%的信=
% 9×1字符数组
% ' e '
% ' h '
% ' t '
% ' g '
% ' g '
% ' g '
%的问
%的问
%的问
接下来,提取的字母转换成一个cell-string然后到一个分类变量。而转换到一个分类变量您将使用“订单列表设置所需的命令。
C =分类(cellstr(字母),letter_list,“顺序”,真正的);
最后,创建一个表列包含分类和tmp数组变量,和使用 sortrows 对表中的行进行排序。使用默认表第一列按升序进行排序,在这种情况下将直言字母所需的秩序。
T =表(C, tmp”,“VariableNames”,(“类别”,“CharArray”]);
T = sortrows (T);
T
% T =
% 9×2表
%类别CharArray
从_____ %
% t {' 1 t0 '}
% q {3 q0的}
% q {' 3 q1 '}
% q {' 3 q2 '}
% e {' 1 e2 '}
% g {' 3 g2 '}
% g {' 3 g3 '}
% g {' 3 g4 '}
% h {' 1 h4 '}
如果不熟悉表,你可以叫列单独使用点符号或数组的索引使用花括号cell-arrays类似。
%等效方法
T.CharArray;
T {: 2};
%你也可以使用下语法,但这将返回答案
表变量%。
T (:, 2);

社区寻宝

找到宝藏在MATLAB中央,发现社区如何帮助你!

开始狩猎!