小编典典

MATLAB中有foreach吗?如果是这样,如果基础数据发生变化,它会如何表现?

all

MATLAB中有foreach结构吗?如果是这样,如果底层数据发生变化(即,如果对象被添加到集合中)会发生什么?


阅读 130

收藏
2022-08-17

共1个答案

小编典典

MATLAB 的 FOR 循环本质上是静态的; 与其他语言中的for(initialization;condition;increment)
循环结构不同,您不能在迭代之间修改循环变量。这意味着无论 B 的值如何,以下代码始终打印 1、2、3、4、5。

A = 1:5;

for i = A
    A = B;
    disp(i);
end

如果您希望能够在迭代期间响应数据结构的变化, WHILE
循环
可能更合适
— 您将能够在每次迭代时测试循环条件,并设置循环变量的值( s) 如您所愿:

n = 10;
f = n;
while n > 1
    n = n-1;
    f = f*n;
end
disp(['n! = ' num2str(f)])

顺便说一句,当在迭代期间修改数据结构时,Java(可能还有其他语言)中的
for-each 循环会产生未指定的行为。如果您需要修改数据结构,则应使用适当的
Iterator
实例,该实例允许在您正在迭代的集合中添加和删除元素。好消息是 MATLAB 支持 Java
对象,因此您可以执行以下操作:

A = java.util.ArrayList();
A.add(1);
A.add(2);
A.add(3);
A.add(4);
A.add(5);

itr = A.listIterator();

while itr.hasNext()

    k = itr.next();
    disp(k);

    % modify data structure while iterating
    itr.remove();
    itr.add(k);

end
2022-08-17