你必须使用()
代替{}
索引单元格:
function left = remove(cells, item)
left = cells(cellfun(@(i) ~isequal(item, i), cells));
Using ()
用于索引将为您提供单元格的子集,同时使用{}
将返回contents细胞子集作为逗号分隔的列表,并且只有该列表的第一个条目才会被放入left
在你的例子中。
您可以查看这个 MATLAB 文档有关使用元胞数组的更多信息。
编辑:回复评论...
如果你有一个手术最终会得到一个以逗号分隔的列表,您可以通过用花括号括起来操作,将列表的各个元素放入元胞数组的单元格中。对于您的示例,您可以这样做:
left = {cells{cellfun(@(i) ~isequal(item, i), cells)}};
内部大括号组创建一个以逗号分隔的内容列表cells
不等于item
,然后外部集合将该列表收集到元胞数组中。当然,这将给出与仅使用括号进行索引相同的结果,在这种情况下这是更明智的方法。
如果你有一个function返回多个输出参数,并且您希望将这些多个值收集到元胞数组中,那么情况会稍微复杂一些。您首先必须决定将获得多少个输出参数,或者您可以使用该函数NARGOUT获得所有可能的输出:
nOut = 3; %# Get the first three output arguments
%# Or...
nOut = nargout(@some_fcn); %# Get all the output arguments from some_fcn
然后你可以将输出收集到一个 1-by-nOut
单元阵列outArgs
通过执行以下操作:
[outArgs{1:nOut}] = some_fcn(...);
应当指出的是NARGOUT如果函数有一个,将返回一个负值可变数量的输出参数,所以你必须选择的值nOut
在这种情况下你自己。