MATLAB 查找字符串,存储在数组中并连接



我有一个 6x2 单元格数组,如下所示:

'Word1_MSW' '1234'
'Word1_LSW' '5678'
'Word2_MSW' '1234'
'Word2_LSW' '5678'
'Word3_MSW' '1234'
'Word3_LSW' '5678'

我想做的是找到所有相应的单词并自动连接它们。例如,我想找到所有的 Word1 并将它们连接起来,使 MSW 从左侧开始,如下所示:"12345678"。然后我想将它们存储到一个新的数组中,这样我就有:

Word1 '12345678'
Word2 '12345678'
Word3 '12345678'

对于此解决方案,我们将首先使用 strtok'_'处断开第 1 列中的字符串,并将第二个字符串放在C的第三列中:

[C(:, 1), C(:, 3)] = strtok(C(:, 1), '_');

接下来,使用 sortrows 按第一列(升序(和第三列(降序(对C行进行排序,并使用 unique 在第一列中查找唯一的单词字符串和索引:

C = sortrows(C, [1 -3]);
[uniqueWords, ~, index] = unique(C(:, 1));

最后,使用 mat2cellaccumarray 对第二列中的值进行分组,用 cellfun 水平连接每个组中的字符串,并使用唯一的单词字符串创建一个新的单元格数组:

wordGroups = mat2cell(C(:, 2), accumarray(index, 1));
out = [uniqueWords cellfun(@(c) {[c{:}]}, wordGroups)];

样品的结果C

out =
  3×2 cell array
    'Word1'    '12345678'
    'Word2'    '12345678'
    'Word3'    '12345678'

以下方法可能有效,或者至少会有所帮助:

numOfWords = 3;     % Enter number of separate 'Words'
for i=1:numOfWords
    wordNum = num2str(i);
    testWord_MSW = ['Word' wordNum '_MSW'];     % Create words to match
    testWord_LSW = ['Word' wordNum '_LSW']; 
    matchingCell_MSW = strmatch(testWord_MSW,cellArray{1}(1:end,:));    % Find matching words
    matchingCell_LSW = strmatch(testWord_LSW,cellArray{1}(1:end,:));
    concatWord = [cellArray{2}(matchingCell_MSW,:) cellArray{2}(matchingCell_LSW,:)];   % Concatenate MSW and LSW words
    finalArray{1}(i,:) = ['Word' wordNum];
    finalArray{2}(i,:) = concatWord;
end

最新更新