添加到单元阵列的末尾

时间:2018-10-09 21:36:30

标签: matlab

我有一个12X1的单元格数组,每个单元格中都包含字符串。我还定义了四个字符串变量,我希望将它们添加到单元格数组的末尾,以使其成为16X1数组。我在代码下方发布了有关如何附加四个变量的信息;但是我正在努力尽我所能学习这种语言,并且我很好奇是否有一种比我写的更加“优雅”的方式来添加这些变量。

git branch -m 48a989d some-better-name

此外,如果您看到其他可以使我的代码更有效的方法,我将不胜枚举!

在此先感谢您,是否还有其他我可以提供的信息。

1 个答案:

答案 0 :(得分:1)

这是您的代码,简化了:

c = cell(12,1);
c{length(c) + 1} = 'a';
c{length(c) + 2} = 'b';
c{length(c) + 3} = 'c';
c{length(c) + 4} = 'd';

让我们看看它的作用:

length(c)
% ans =  22

糟糕!第一行添加一个元素;第二行在结尾处添加元素2,然后在字符串中添加一个空元素;第三行在末尾添加元素3,先添加两个空元素,然后添加字符串。等等-请注意,length(c)每次都会在扩展数组上求值!

您要执行的操作是:

c = cell(12,1);
c{length(c) + 1} = 'a';
c{length(c) + 1} = 'b';
c{length(c) + 1} = 'c';
c{length(c) + 1} = 'd';

或更简单地

c = cell(12,1);
c{end + 1} = 'a';
c{end + 1} = 'b';
c{end + 1} = 'c';
c{end + 1} = 'd';

在这里,我们每次都附加一个元素。为了防止增加阵列大小4次,可以按相反的顺序分配它们:

c = cell(12,1);
c{end + 4} = 'd';
c{end - 1} = 'c';
c{end - 2} = 'b';
c{end - 3} = 'a';

这次,我们将在第一个语句中添加4个元素,然后再填充它们。

另一个选择是

c = cell(12,1);
c(end + (1:4)) = {'a','b','c','d'};

(请在此处注意用于索引的圆括号)。现在,我们要一次性添加4个元素。