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

从您提供的代码以及您给 Theodros 的评论来看,我认为这是一个代码异味的案例。换句话说,我有一种预感,您的方法存在更深层次的问题,如果您披露您的全部问题,我们可能会改进这些问题。

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