缩短'如果'声明数量很多的'或' MATLAB中的条件

时间:2016-04-11 16:43:56

标签: matlab if-statement

假设我们在MATLAB中有这个#include <stdio.h> #include <stdlib.h> char fillcards(void) { int i,j; srand(8490); char P[1001][16]; for(i=0; i<1000; i++) { for(j=0; j<15; j++) { char randomletter="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ"[rand() % 36]; P[i][j]=randomletter; } } return P; } int main(int argc, char *argv[]) { ... // char P[.][.]=fillcards printf("%s\n", P[1]); // Just to test system("PAUSE"); return 0; } 语句:

if

是否可以缩短此if rn == 1 || rn == 2 || rn == 3 || rn == 4 || rn == 5 %% Some calculations elseif rn == 6 || rn == 7 || rn == 8 || rn == 9 || rn == 10 %% Some calculations end 声明?

2 个答案:

答案 0 :(得分:7)

您可以使用any检查值向量来执行此操作:

if any(rn == 1:5)
  %% Some calculations
else if any(rn == 6:10)
  %% Some calculations
end

答案 1 :(得分:3)

对于性能,使用||(允许短路)优于以下内容,但如果您真的想避免写出额外的OR子句,则可以使用{{3} }

if ismember(rn, 1:5)
  %% Some calculations
elseif ismember(rn, 6:10)
  %% Some calculations
end

如果true是数组的成员(rn1:5,则返回5:10),否则返回false

另一种选择是使用ismember,如下所示

if find(1:5 == rn)
  %% Some calculations
elseif find(6:10 == rn)
  %% Some calculations
end

由于您检查了不同值向量中的相等性,find将返回单个索引>= 1,其将评估为true,或者返回一个空矩阵,它将评估为false

如果你知道rn是一个整数,你自然可以检查它是否在上面的范围表示中

if rn >= 1 && rn <= 5
  %% Some calculations
elseif rn >= 6 && rn <= 10
  %% Some calculations
end