我有一个 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));
最后,使用 mat2cell
和 accumarray
对第二列中的值进行分组,用 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