标题中的“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/