社区首页 >问答首页 >就可维护性而言,映射表是比大型switch语句更好的设计吗?

就可维护性而言,映射表是比大型switch语句更好的设计吗?
EN

Stack Overflow用户
提问于 2011-08-23 16:09:40
回答 2查看 117关注 0票数 4

我正在将文本文件从一组定义转换到另一组定义,我通过编写一个小型解析器解决了这个问题。一旦我识别了一个符号,我就会在case语句中结束,该语句根据用户选择的输入选项(这些代码在不同的机器上表示不同的东西)来决定调用哪个转换例程。

我本质上是将多个输入格式转换成一种输出格式,大约400个独特的符号。

问题是,随着这个项目从几个简单的翻译(每个翻译都在自己的头文件中)成长为十几个甚至更多的输入格式,它的维护变得越来越麻烦。这些头文件中的每一个都包含一个生成相关输出的monster switch语句。这一切都很好用,但看起来真的很笨拙。

我是否可以通过为每个输入机器创建映射表(即包含输入和输出符号的二维数组)并使用一个将表作为输入的通用转换例程来解决可维护性问题?有没有我应该考虑的更好的设计?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2011-08-23 16:14:46

哈希表类型的结构肯定更容易维护,但至少有一个权衡,即您的巨型switch语句几乎肯定会更快,因为任何像样的编译器都会将其优化为跳转表。但它(取决于实现)不应该那么明显地慢,除非你正在做500亿次查找或其他事情。也就是说,哈希表可以优化为与switch语句一样快。

底线:如果你不需要确保你能获得每一盎司的速度,那么我会选择哈希表。如果这很重要,那就写个人资料。

您可能想看看gperf,它可以生成编译时完美的哈希表。

票数 5
EN

Stack Overflow用户

发布于 2011-08-23 16:23:05

您可以使用宏来减少代码重复。例如

代码语言:javascript
代码运行次数:0
复制
#define ENTRY(ID, OUT) case ID: write_to_output(out); break;

switch (id) {
   ENTRY(ID1, "ID1");
   ENTRY(ID2, "ID3");
   ENTRY(ID2, "ID3");

   default:
     ....
}
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7164110

复制
相关文章
对开发者而言,GitHub Profile可能是比简历更好的求职利器
这是一篇抒发个人意见的文章,内容来源于作者自己和其他挖掘程序员才能的招聘者的个人经验。
深度学习与Python
2020/09/29
1.2K0
对开发者而言,GitHub Profile可能是比简历更好的求职利器
switch语句和if语句有什么区别?哪个更好用
众所周知,我们常用的if语句是通过进行条件的设置以及对数据的处理,从而将我们所面对的数据去进行一个分类、添加其他属性,所以if语句是非常常用的一个语句,绝大多数的计算机入门者也都需要熟练掌握if语句的用法。而switch语句则是通过判断选择来添加属性,所以它和if语句之间是有相同之处的,二者的作用也比较相似。那么switch语句和if语句有什么区别呢?哪一个语句更加好用?
用户8794017
2021/07/02
5.1K0
switch语句
使用if语句嵌套解决实际问题中的多分支选择时,如果分支数目非常多,那么if语句的嵌套层数也会很多,使得程序代码变得冗长而且可读性会下降。C语言提供了switch语句来处理多分支选择。
pigeon
2022/04/11
1.5K0
switch语句
Switch语句
当case数目多,数字比较集中时,使用完美哈希函数生成跳转表,性能高于if-else。
luoheng
2022/08/29
1.2K0
Go是更好的编程语言吗?
第一次接触GO是5年前,14年4月份,也是在我司,全职钻研一周,彼时C++中毒太深,内心排斥其他编程语言,看其他语法总觉得有点怪,而且有“C/C++能做任何事,故无用其他语言之必要”的思想在作祟。
AI科技大本营
2019/05/13
2K0
Go是更好的编程语言吗?
JavaScript switch 语句
工作原理:首先设置表达式n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。请使用break来阻止代码自动地向下一个 case 运行。
陈不成i
2021/07/16
1.2K0
java switch用法_Java switch语句
Java switch语句用于从多个条件执行一个语句。它就像if-else-if语句一样。
全栈程序员站长
2022/09/08
1.7K0
C++核心准则ES.70:进行选择时,switch语句比if语句好
Flag if-then-else chains that check against constants (only).
面向对象思考
2020/05/29
3360
C++核心准则ES.70:进行选择时,switch语句比if语句好
C语言switch语句的用法详解_c语言switch语句例题
C语言虽然没有限制 if else 能够处理的分支数量,但当分支过多时,用 if else 处理会不太方便,而且容易出现 if else 配对出错的情况。例如,输入一个整数,输出该整数对应的星期几的英文表示:
全栈程序员站长
2022/09/27
1.6K0
就编程而言,Linux是否已经足够?
但在我的心里,总有一种欲望,就是想去使用一个自由的操作系统,我不希望自己被MacOS约束,虽然它非常优秀。
御剑
2021/11/12
2.1K0
JavaScript Switch 语句
工作原理:首先设置表达式 n(通常是一个变量)。随后表达式的值会与结构中的每个 case 的值做比较。如果存在匹配,则与该 case 关联的代码块会被执行。请使用 break 来阻止代码自动地向下一个 case 运行。
一觉睡到小时候
2019/07/03
6810
VLSI/SoC设计或架构是否比验证更好?
十年前可能确实如此,但现在已经不复存在了。传统上,验证工程师被认为是对设计进行一些定向测试并检查功能正确性的工程师。
AsicWonder
2021/07/16
6060
VLSI/SoC设计或架构是否比验证更好?
Java的控制语句switch
Java中的switch语句是一种常见的控制结构,它可以根据一个表达式的值,跳转到与之对应的分支执行相应的代码块。
玖叁叁
2023/05/06
6230
switch选择语句
switch选择语句 语法: $a=1;//初始化a switch($a){ case“”: 执行语句 break; ....... case “”: 执行语句 break; default: 执行
十月梦想
2018/08/29
8050
c语言switch例题注释,switch语句例子大全 C语言switch语句例题
matlab中switch语句看了好几本教材上的例子都未看懂核心,不知谁能提供if-else-end语句所对应的是多重判断选择,而有时也会遇到多分支判断选择的问题。 MATLAB语言为解决多分支判断选择提供了switch-case语句。 switch-case语句的一般表达形式为: switch〈选择判断量〉 Case 选择判断值1 选择判断语句1 case 选择判
全栈程序员站长
2022/11/03
2.6K0
#0001:Done is better that perfect,比完美更好的是完成
Done is better that perfect并非Facebook CEO原创,但因为他说出来而被大家所知。中文直译就是标题所说的:比完美更好的是完成,但我觉得翻译为:比完美更重要的是完成,更好些。
崔文远TroyCui
2019/02/26
1.2K0
#0001:Done is better that perfect,比完美更好的是完成
想知道switch是怎么判断条件的吗
"难道面试不顺利?"小A心想。于是问小呼都问了什么。小呼说,面试官问了个奇怪的问题,
PhoenixZheng
2018/08/07
7990
为什么 APISIX Ingress 是比 Traefik 更好的选择?
Apache APISIX Ingress[1] 是一个使用 Apache APISIX 作为数据面的 Kubernetes Ingress controller 实现。
米开朗基杨
2023/01/09
1.1K0
为什么 APISIX Ingress 是比 Traefik 更好的选择?
C语言switch语句用法_c语言switch语句格式
C语言中,switch语句是一种多分支选择语句,在实际应用中,要在多种情况中选择一种情况,执行某一部分语句。
全栈程序员站长
2022/09/27
2.6K0
点击加载更多

相似问题

就性能而言,bcolz比使用datagenerator更好吗?

119

"constexpr if“是否比switch语句更好?

03

比switch语句更好的解决方案

50

就性能而言,Flex和Silverlight哪个更好?

10

就数据库性能而言,哪个更好?

10
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档