Matlab - 用于循环遍历单元格数组“foreach”的语法仅在第一个元素上循环

时间:2014-02-06 01:08:45

标签: matlab loops for-loop syntax cell-array

我想如果我写

for x = cell_array
    ...
end

然后循环将遍历cell_array的元素,但在以下情况下它不会:

>> tags

tags = 

    'dset3'
    'dset4'
    'cpl1'

>> class(tags)

ans =

cell

>> for t = tags
     tmp = t{:}  %No semicolon: i.e. print it.
   end

tmp =

dset3

所以它只适用于第一个元素。

有什么问题?

2 个答案:

答案 0 :(得分:9)

根据the documentationfor x = cell_array会迭代单元格数组的

问题混淆的原因与{:}展开的行为有关:

>> a = {3;4}

a = 

    [3]
    [4]

>> b = a{:}

b =

     3

在上文中,a{:}执行的操作类似于以逗号分隔的列表键入,其中元素是单元格数组a的元素。除了不完全!如果我们明确地编写这样的列表,我们得到:

>> c = 3,4

c =

     3


ans =

     4

不知何故,对于>> b = a{:}a的其他元素会被静默丢弃,即使例如a = {1 2; 3 4}

但是,在其他情况下,a{:}将扩展为完整的逗号分隔列表:

>> extra_args = {'*-'; 'linewidth'; 30};
>> plot(1:2, extra_args{:})
>> extra_args = {};
>> plot(1:2, extra_args{:})

这将做他们打算做的事。

答案 1 :(得分:2)

Matlab内置了一个名为cellfun的好函数。它允许您依次对阵列中的每个元素“做某事” - 无论其形状如何。

例如:

cellfun(@(x)fprintf(1,'%s',x), cellArray);

将遍历cellArray,并在每个单元格中打印字符串。

您还可以执行以下操作之一:

for x = cellArray(:)

  % do stuff to x

end