现在我们要实现这样一个程序片段(伪代码):
array1={e11,e12,e13,...};
array2={e21,e22,e23,...};
array3={e31,e32,e33,...};
.......
arrayn={en1,en2,en3,...};
if elem ∈ array1
exp1;
else if elem ∈ array2
exp2;
......
else if elem ∈ arrayn
expn;
每个判断都是在一个数组中寻找某个元素是否存在,该如何实现呢?
将elem与数组的每个元素依次比较,比较表达式之间用或连接起来,这是一个办法。但这个方法在数组元素较多时会使条件表达式变得冗长,能否考虑使用for循环呢?
棘手的是if后面不能直接接for语句,我们必须做一下变通,先使用for语句判断elem属于哪一个数组,并用一个标识符flag来标示,接着再用标识符来控制执行语句。同样以伪代码来说明:
for(arrayi[j]) //i=1,2,3,...,n
if(elem==arrayi[j])
{
flag=flagi;
break;
}
switch(flag)
{
case flag1:exp1;
case flag2:exp2;
......
}
凡是一次判断涉及多个元素的程序都可以用这种办法来做。
这种办法有一个不足之处,当elem不是属于最后一个数组的时候,对elem所属数组判断之后的判断是多余的。用goto跳转可以解决,有没有更好的办法?