1. ホーム
  2. matlab

[解決済み] MATLABにforeachはあるのか?もしあれば、基礎となるデータが変更された場合、どのように動作するのでしょうか?

2022-04-21 12:15:56

質問

MATLABにはforeach構造があるのでしょうか? もしあれば、基礎となるデータが変更された場合(つまり、オブジェクトがセットに追加された場合)どうなるのでしょうか?

どのように解決するのですか?

MATLABの FOR ループは静的な性質を持っており、反復の間にループ変数を変更することはできません。 for(初期化;条件;インクリメント) 他の言語でのループ構造 つまり、次のコードはBの値に関係なく、常に1, 2, 3, 4, 5と表示されることになります。

A = 1:5;

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

反復中のデータ構造の変更に対応できるようにしたい場合は WHILE ループ の方がより適切かもしれません。ループの条件を繰り返しごとにテストし、ループ変数の値を好きなように設定できます。

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

を、ト書きしています。 for-each ループ Javaで (は、反復処理中にデータ構造が変更されると、不特定の動作をします。もし、データ構造を変更する必要があるならば、適切な イテレータ インスタンスで、反復処理中のコレクションに要素を追加したり削除したりすることができます。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