基本上我有一个大约100多行的表,其中a,b,c和d作为列.基于a,c和d,我需要执行3种不同类型的功能.
该表描述了一组业务规则.
uint8 a; uint8 b; uint16 c; uint8 d; if ( a == 1 && b == 1 && c == 0) { functionA();} else if ( a == 5 && b == 5 && c == 2 && d == 2) { functionB();} else if ( a == 1 && (b ==36 || b == 7) && c == 0) { functionC();} else if ( a == 3 && b == 3 && d == 50) {functionA();} : :解决方法 有很多方法可以使它更简单,例如:
>您可以从包含a,c和d值的结构填充地图以检查要调用的函数(填充地图的代码可能仍然是一团糟,但它会更快更清晰地执行;可以为案例添加两个键ala b == x || b == y)
>你可以手动分析条件:给出你的例子,如果(a == 1)if(b == 1&& c == 0)functionA();否则if((b == 36 || b == 7)&& c == 0)functionC();. switch语句可以使这个更干净.在这样的分解中,您还可以使用<,< =,>和/或> =来划分更大的搜索空间,从而将性能从O(N)提高到O(log2N).
>对于测试a,c和d一次的常见简单情况,使用宏ala #define EliF_ABCD(A,B,C,D,F)否则if(a ==(A)&& b ==(B)&& c ==(C)&& d ==(D))F();.根据需要为其他测试组合添加宏,例如ABD,ABC,AD.
>(可能使代码更加神秘),但可以探索位移和将值组合成一个足够大的类型(int64_t),然后例如.二进制搜索函数指针数组
值得注意的是,if / else链可能包含以下内容:
if (a == 1 && c == 3 && d == 2) functionY();else if (a == 1 && b == 2 && c == 3) function X();
这里,顺序很重要,因为输入可以匹配两者.如果不同地考虑搜索或者使用某种方式对函数指针进行索引,则这个方面很容易丢失或改变,这是支持上述宏方法的一个论据.
总结以上是内存溢出为你收集整理的c – Big if else声明全部内容,希望文章能够帮你解决c – Big if else声明所遇到的程序开发问题。
如果觉得内存溢出网站内容还不错,欢迎将内存溢出网站推荐给程序员好友。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)