MATLAB には foreach がありますか? もしあるなら、基になるデータが変更された場合どのように動作しますか? 質問する

MATLAB には foreach がありますか? もしあるなら、基になるデータが変更された場合どのように動作しますか? 質問する

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

ベストアンサー1

MATLABののためにループは本質的に静的です。ループ変数を反復間で変更することはできません。for(初期化;条件;増分)他の言語のループ構造。つまり、次のコードは、B の値に関係なく、常に 1、2、3、4、5 を出力します。

A = 1:5;

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

反復中にデータ構造の変化に対応できるようにしたい場合は、その間ループより適切かもしれません --- ループ条件を各反復でテストし、ループ変数の値を必要に応じて設定できるようになります。

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

ちなみに、それぞれループジャワ島(他の言語でも可能かもしれないが)反復中にデータ構造が変更されると、不特定の動作が発生する。データ構造を変更する必要がある場合は、適切なイテレータ反復処理するコレクション内の要素の追加と削除を可能にするインスタンス。嬉しいことに、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

おすすめ記事