Matlab:对2个单元格的字符串进行排序

时间:2015-05-07 09:02:22

标签: string matlab cell

我有两个字符串的单元格矩阵,我想比较和排序一个。例如:

Data1={'hello','daddy','mama';'0','55','60';'asd','','dwadsdwa'};

Data2={'cat','daddy','dog','cat','mama','daddy';'21','54','79','1','0','231';'sa','wda','thjd','gf','wda','sda'};

我想比较矩阵的第一行,并用匹配的元素及其列创建一个新的结果矩阵。像:

matches={'daddy','daddy','daddy','mama','mama';'55','54','231','60','0';'','wda','sda','dwadsdwa','wda'};

我尝试过:

Da1Index=find(ismember(Data1(1,:),Data2(1,:)));
Firstmatches=Data1(:,Da1Index);

Da2Index=find(ismember(Data2(1,:),Data1(1,:)));
Secondmatches=Data2(:,Da2Index);

所以我会在其他2个Cell矩阵中得到匹配元素及其列。现在我可以在Secondmatches单元阵列中搜索Firstmatches的每个单一名称元素,但我想知道是否有更好的方法? 此外,我不知道如何将列添加到正确的位置。

也许有一种更简单的方法可以做到这一点?我希望很清楚我想要实现的目标!

1 个答案:

答案 0 :(得分:0)

您可以按照以下方式执行此操作:

i1 = ismember(Data1(1,:), Data2(1,:));  %// columns of Data1 to keep
i2 = ismember(Data2(1,:), Data1(1,:));  %// columns of Data1 to keep
matches = [Data1(:,i1) Data2(:,i2)];    %// build result
matches = sortrows(matches.').';        %// sort if needed. Note: lexicographical order