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