这可能是一个愚蠢的问题,但我无法找到答案:
案例很简单,我有一个函数,在条目中有一个整数,两个变量根据它分配。问题是分配给变量的值在某些情况下是常见的,但这两种情况的情况并不相同。 (如果不够清楚,请参阅示例)。
我想知道这种情况的最佳做法是什么。 它是这样的:
function test(a){
var x,y;
switch (a){
case 0:
case 1:
case 7:
y=...;
break;
case 2:
case 6:
y=...;
break;
case 3:
case 4:
case 5:
y=...;
}
switch(a){
case 5:
case 6:
case 7:
x=...;
break;
case 0:
case 4:
x=...;
break;
case 1:
case 2:
case 3:
x=...;
}
...
}
或
function test(a){
var x,y;
switch (a){
case 0:
x=...;
y=...;
break;
case 1:
x=...;
y=...;
break;
case 2:
x=...;
y=...;
break;
case 3:
x=...;
y=...;
break;
case 4:
x=...;
y=...;
break;
case 5:
x=...;
y=...;
break;
case 6:
x=...;
y=...;
break;
case 7:
x=...;
y=...;
}
...
}
或者在每种情况下使用两者的混合分配给x的值,并为y的值创建分组?
请注意,可能有超过8个值,仅用于示例。 提前谢谢。
答案 0 :(得分:3)
如果switch语句中的不同情况之间没有真正重叠,那么最好将它们分开。
如果操作之间存在大多数共性,您可以将它们与单个case
块中的某些特殊情况相结合,但您似乎表明情况并非如此。
但是,如果这不仅仅是很多更复杂的案例的简单示例,那么您可以通过以下方式实现更紧凑的解决方案:
// index: 0 1 2 3 4 5 6 7 8 9 10 11 12
static const int lookupX[] = { 2, 7, 1, 8, 2, 8, 1, 8, 2, 8, 4, 5, 9};
static const int lookupY[] = { 3, 1, 4, 1, 5, 9, 2, 6, 5, 3, 5, 8, 9};
if ((a >=0) && (a < sizeof(lookupX) / sizeof(*lookupX)))
x = lookupX[a];
if ((a >=0) && (a < sizeof(lookupY) / sizeof(*lookupY)))
y = lookupY[a];
这将允许您将值保存在更小的“配置”部分中,以便您可以轻松查看意图。然后范围检查和查找变得非常简单。
该代码是针对C量身定制的 - 我不确定您使用的是哪种特定语言(因为var
语句),但如果索引有效,它基本上只进行查找。您需要将该位翻译成您选择的语言。