另一个可能是问题。
给出一个字符串数组
M = [a b
011 10
001 10
112 4
015 2
086 1
117 1
121 2]
你可以看到这些值是字符串而不是数字, 所以我想组合相同字符串的行,例如011和001具有相同的b,即10,所以这就是我想要的输出:
T = [a b
011,001 10,10
112 4
015,121 2,2
086,117 1,1]
因此你可以再次看到,011和001合并它们在同一个单元格中以及086和117,我想要一个输出,当你复制并粘贴到单词011和001或所有组合字符串必须是显示,如果你是nx 2字符串数组怎么办? 这意味着您不知道数组的行大小。 有可能吗?感谢
答案 0 :(得分:2)
我的策略是将您的字符串转换为单元格。这是一个解决方案:
% --- Define M
M = [sprintf('%s\t%s\n', 'a', 'b') ...
sprintf('%s\t%s\n', '011', '10') ...
sprintf('%s\t%s\n', '001', '10') ...
sprintf('%s\t%s\n', '112', '4') ...
sprintf('%s\t%s\n', '015', '2') ...
sprintf('%s\t%s\n', '086', '1') ...
sprintf('%s\t%s\n', '117', '1') ...
sprintf('%s\t%s\n', '121', '2')]
% --- Convert into cells
tmp = textscan(M, '%s\t%s\n');
C1 = tmp{1}; % First column
C2 = tmp{2}; % Second column
% --- Group
% Get unique values of the second column
UV = unique(C2, 'stable');
% Prepare result columns
R1 = {};
R2 = {};
% Group
for i = 1:numel(UV)
b = ismember(C2, UV{i});
R1{i,1} = strjoin(C1(b), ',');
R2{i,1} = strjoin(C2(b), ',');
end
% --- Convert the result to a string
Res = '';
for i = 1:numel(R1)
Res = [Res sprintf('%s\t%s\n', R1{i}, R2{i})];
end
Res
字符串包含:
Res =
086,117 1,1
011,001 10,10
015,121 2,2
112 4
a b
这不是您想要的输出,因为它没有排序。如果您希望对输出进行排序,请准确说明标准。
修改强>
我更正了代码,使输出按输入第二列定义的顺序显示。 'stable'
的{{1}}参数可以解决问题。
输出现在是:
unique