我假设 A 是一个元胞数组 -
A = { 'AA AB AC CD'; 'BA AC CF GD'; 'AA AB AC CD'; 'CF GD TH EF'; 'AA AB AC CD'}
为了解决上述问题,这里可以建议一些方法。
方法#1
这是一种直截了当的方法-
[unique_strings,~,labels] = unique(A,'stable');
counts = histc(labels,1:max(labels))
方法#2
这是一个面向性能的解决方案,可将元胞数组转换为2D 数组 -
[~,idx,labels] = unique(double(char(A)),'rows','stable')
counts = histc(labels,1:max(labels))
unique_strings = A(idx)
方法#3
这是另一种面向性能的解决方案,它在将单元格中的所有字符合并为一个数字后将单元格数组转换为 1D 数组 -
num_array = char(A)-0
pow10_vals = 10.^(size(num_array,2)-1:-1:0)
[~,idx,labels] = unique(num_array*pow10_vals','stable') %//'
counts = histc(labels,1:max(labels))
unique_strings = A(idx)
你会得到的输出 -
>> unique_strings
unique_strings =
'AA AB AC CD'
'BA AC CF GD'
'CF GD TH EF'
>> counts
counts =
3
1
1
输出也可以用table 以奇特的方式显示-
>> table(unique_strings,counts)
ans =
unique_strings counts
______________ ______
'AA AB AC CD' 3
'BA AC CF GD' 1
'CF GD TH EF' 1
请注意,如果您不关心字符串的顺序,您可以使用上述方法跳过'stable' 选项,这可能会更有效一些。