0

以下のように、複数の if ステートメントを組み合わせて同じ順序で実行する方法はありますか。

X = [1 2 3 4; 5 4 6 7; 2 8 9 2];
X

n = length(X(1,:))-1;

for i=1:n,     
    if length(X(1,:)) == n,
    .........
    end

    if length(X(1,:)) == n-1,
    .........
    end

    if length(X(1,:)) == n-2,
    .........
    end
end

助言がありますか?

4

1 に答える 1

1

あなたが提供したコードとテオドロスに与えたコメントから判断すると、これはコードの匂いのケースだと思います。言い換えれば、あなたのアプローチにはもっと深い問題があるのではないかと私は考えています。問題を完全に開示していただければ、改善できるかもしれません。

そうは言っても、実行したい操作がケースごとに異なる場合、明らかに、それらを 1 つのステートメントに結合することはできません。各ブロックに同じプロシージャの複数のコピーがある場合は、論理 OR を使用できます。

if length(X(1,:)) == n || length(X(1,:)) == n-1
    ...
end

if length(X(1,:)) == n-2 || length(X(1,:)) == n-4
    ...
end

switch@TheodrosZellekeが提案したように、ステートメントを使用すると、コードは見栄えが良くなります(そして少し速くなります) 。ケースを組み合わせると、次のようになります。

switch length(X(1,:))

    case {1 2}  %# length == 1 OR length == 2
        ...
    case {3 4}  %# length == 3 OR length == 4
        ...
end
于 2012-10-08T04:20:40.260 に答える