matlab中字符串数组与同一字符串的组合
另一个可能的问题是 给定一个字符串数组matlab中字符串数组与同一字符串的组合,matlab,Matlab,另一个可能的问题是 给定一个字符串数组 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
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中,我想要一个输出,当您复制并粘贴到word 011和001或所有合并字符串时,必须显示该输出,如果您使用n x 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
这不完全是您想要的输出,因为它没有排序。如果要对输出进行排序,请精确说明标准
编辑 我更正了代码,使输出按照输入的第二列定义的顺序显示。
unique
的'stable'
参数起了作用
现在输出为:
Res =
a b
011,001 10,10
112 4
015,121 2,2
086,117 1,1
由于015和121在第二列中的值为2,是否有原因未在输出中分组?很抱歉,它们应该包括在内,我将对其进行编辑。请定义正确的顺序。它是按字母顺序排列的还是初始出现顺序?它是否也适用于n x 2数组?我的意思是,它是一个通用代码?谢谢。在Matlab中可以使用n×2数组字符串数组,但这不是您正在使用的。你能确定输入的类别吗?
class(M)
的输出是什么?我的意思是输出的顺序请检查我的问题编辑的代码给出了一个错误:使用strjoin(第52行)的错误第一个输入必须是字符串的1xN单元格数组。res(第29行)R1{i,1}=strjoin(C1(b),',')中的错误;