matlab - 是否可以避免在元胞数组上迭代时出现 "s{1} annoyance"?

标签 matlab loops for-loop

标题中的“s{1} annoyance”指的是下面 for block 中的第一行:

for s = some_cell_array
    s = s{1};  % unpeel the enclosing cell
    % do stuff with s
end

这个 s = s{1} 业务是必要的,因为 some_cell_array 的迭代并没有真正迭代 some_cell_array 的内容,但是而不是超过 1 个元素的 cells,每个元素都包含来自 some_cell_array 的项目。

抛开谁可能希望将此行为作为默认的问题,是否有任何方法可以迭代 bare 的内容some_cell_array?

最佳答案

我认为在一般情况下没有办法避免这个问题。但是,如果您的元胞数组包含所有数字或所有字符,则有一种方法。您可以转换为数组并让 for 循环对其进行迭代。

例如,这个:

some_cell_array = {1,2,3}
for s = [some_cell_array{:}] % convert to array
    s
end

给予:

s =
     1
s =
     2
s =
     3

另一种选择是创建一个对数组的每个单元格进行操作的函数。然后你可以简单地调用cellfun并且根本没有循环。

我不知道谁会想要这种行为或者它如何有用。然而,我猜测它为何以这种方式工作,这是一个实现问题。这样循环迭代器就不会在不同的迭代中改变类型。每次都是一个单元格,即使该单元格的内容是不同的类型。

关于matlab - 是否可以避免在元胞数组上迭代时出现 "s{1} annoyance"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16587564/

相关文章:

java - 检查所有给定的 n 个对象是否相同或不同的最有效方法?

javascript - 如何在完成具有 axios 调用的 for/forEach 循环执行后调用语句?

matlab - 有没有办法避免循环使这段代码更快?

matlab - 反转 plotyy 的一个 y 轴

oop - MATLAB 中非静态方法的用途是什么?

matlab - 在 matlab 中对 pcolor 进行着色和 mask

c - 如何使用两个或多个迭代器在 for 循环内递增

java - 将彩色图像转换为 Array[i][j]

每个人重复一个模型 100 次

c - 将 getchar 与指针一起使用,如 char 数组