将几个IF语句合并为一个(matlab)?

时间:2012-10-07 19:37:52

标签: algorithm matlab matrix

是否有办法将几个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

有什么建议吗?

1 个答案:

答案 0 :(得分:1)

根据您提供的代码以及您给予Theodros的评论,我认为这是code smell的情况。换句话说,我预感到您的方法存在更深层次的问题,如果您披露完整问题,我们可能会改进这些问题。

现在,已经说过:如果你想要执行的操作对于每种情况都不同,那么显然,你不能将它们组合成一个语句。如果每个块中有相同过程的多个副本,则可以使用逻辑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