【发布时间】:2019-09-21 18:56:05
【问题描述】:
我在我的 switch() 语句中处理了很多情况,我想知道是否有任何可能的方法可以缩短这些情况。它们在我的代码中占用了大量空间,当这些语句有 3-4 个大块时,导航变得更加困难。 这是一个例子:
...important lines of code...
void foo(string bar, bool blam) {
int v1 = stoi(bar);
switch (v1) {
case(11):
if(blam) {
exArr[1] = "A";
} else {
exArr[1] = "B";
}
break;
case(12):
if(blam) {
exArr[3] = "A";
} else {
exArr[3] = "B";
}
break;
...many more cases...
default:
printElement();
break;
}
...even more important code, which is dependent on the hard code above and hard to navigate...
我认为您看到了问题所在。你们有什么建议吗?提前致谢。
重要编辑:
只有前 12 次迭代会改变 exArr 的字符。之后,它会更改为另一个(现有)数组,例如 ndArr,它需要另外 12 次迭代。这适用于 4 个数组,因此大约有 48 个 case 语句。
【问题讨论】:
-
v1的值和exArr中的索引之间是否存在关系,可以写成数学公式? -
blam是否总是区分想要的"A"和"B"? -
如果代码具有与 sn-p 相同的模式,则只是一个整数数组或
std::vector<int>。 index 是 v1 的值,该值是 exArr 中项目的索引。喜欢exArr[map[v1]] = blam ? "A" : "B"。无需开关。 -
extraArr[1] = blam ? "A" :"B";之类的东西至少会更紧凑一些。 -
如果在每个
case语句中您都在询问blam,那么您可能想要if (blam) { switch()... } else { switch()... }之类的东西,这意味着您有两个较短的switches 和一个if。
标签: c++ loops switch-statement