在 MATLAB 中,如何在元胞数组中的每个字符串的开头插入一个字符串?

In MATLAB how do I insert a string at beginning of of each string in a cell array?

我有一个数字字符串元胞数组,例如:

labels = {'1', '2', '3', '4', '5', '6', '7', '8', '9', '10', '11', '12'}

我试图在不使用任何循环的情况下向每个数组元素的开头添加一个字符串 ('Label '),因为数组很大,我需要代码 运行迅速地。我的另一个要求是,一旦将 'Label' 应用于数组中的两位数元素,就必须保留 space 一词。我想要的结果是:

fullLabels = {'Label 1', 'Label 2', 'Label 3', 'Label 4', 'Label 5',
              'Label 6', 'Label 7', 'Label 8', 'Label 9', 'Label 10',
              'Label 11', 'Label 12'}

我试过这样使用 strcat()

fullLabels = strcat('Label ', labels);

这对于个位数的数组元素没问题,但是当它应用于两位数的数组元素时,去掉'Label'之后的space得到:

fullLabels = {..., 'Label10', 'Label11', 'Label12'}

strcat 在串联之前从所有输入中修剪尾随白色 space。您需要使用 [].

手动连接字符串
fullLabels = cellfun(@(x)['Label ', x], labels, 'UniformOutput', false)

%   'Label 1'
%   'Label 2'
%   'Label 3'
%   'Label 4'
%   'Label 5'
%   'Label 6'
%   'Label 7'
%   'Label 8'
%   'Label 9'
%   'Label 10'
%   'Label 11'
%   'Label 12'

您也可以使用 regexprep 之类的东西来添加标签。这会将每个标签的第一个字符替换为自身 (</code>),并在前面附加 <code>'Label '

fullLabels = regexprep(labels, '^.', 'Label ')

更新

@Dev-iL 的回答提到使用元胞数组将 space 传递给 strcat,我当时并不知道。除了连接 space,我们还可以将 'Label ' 粘贴在 单元格内。

strcat({'Label '}, labels)

由于 strcat 仅删除 尾随 space,如果您设法让数字字符串以 space 开头(使用任何将它们从 "proper numbers" 转换而来的设置),你不会看到这个问题:

labels = {' 1', ' 2', ' 3', ' 4', ' 5', ' 6', ' 7', ' 8', ' 9', ' 10', ' 11', ' 12'};
fullLabels = strcat('Label',labels);

或者,如 here 所述,您可以 "fool" strcat 通过用单元格包围 space:

fullLabels = strcat('Label', {' '}, labels);