[软件资料] switch语句vs查找表

[复制链接]
 楼主| LOVEEVER 发表于 2024-3-5 18:00 | 显示全部楼层 |阅读模式

Switch的应用场景如下:

调用一到多个函数
设置变量值或者返回一个值
执行一到多个代码片段
如果case标签很多,在switch的前两个使用场景中,使用查找表可以更高效的完成。例如下面的两种转换字符串的方式:

  1. char * Condition_String1(int condition) {
  2.   switch(condition) {
  3.      case 0: return "EQ";
  4.      case 1: return "NE";
  5.      case 2: return "CS";
  6.      case 3: return "CC";
  7.      case 4: return "MI";
  8.      case 5: return "PL";
  9.      case 6: return "VS";
  10.      case 7: return "VC";
  11.      case 8: return "HI";
  12.      case 9: return "LS";
  13.      case 10: return "GE";
  14.      case 11: return "LT";
  15.      case 12: return "GT";
  16.      case 13: return "LE";
  17.      case 14: return "";
  18.      default: return 0;
  19.   }
  20. }

  21. char * Condition_String2(int condition) {
  22.    if ((unsigned) condition >= 15) return 0;
  23.       return
  24.       "EQ\0NE\0CS\0CC\0MI\0PL\0VS\0VC\0HI\0LS\0GE\0LT\0GT\0LE\0\0" +
  25.        3 * condition;
  26. }

第一个程序需要240 bytes,而第二个仅仅需要72 bytes。

huquanz711 发表于 2024-3-5 19:34 来自手机 | 显示全部楼层
难的是实际应用过程中很难找到这种映射关系。
星辰大海不退缩 发表于 2024-3-11 09:27 | 显示全部楼层
如果case标签很多,在switch的前两个使用场景中,使用查找表可以更高效的完成。
OKAKAKO 发表于 2024-3-11 19:00 | 显示全部楼层
程序优化确实是一件非常重要的任务
小小蚂蚁举千斤 发表于 2024-3-19 12:32 | 显示全部楼层
如果case标签很多,在switch的前两个使用场景中,使用查找表可以更高效的完成,高效的运行方式很重要
小夏天的大西瓜 发表于 2024-3-19 12:51 | 显示全部楼层
如果case标签很多,在switch的前两个使用场景中,使用查找表可以更高效的完成
中国龙芯CDX 发表于 2024-3-21 15:10 | 显示全部楼层
使用查找表法在case标签很多的switch使用场景中
jf101 发表于 2024-3-22 12:09 | 显示全部楼层
这种映射关系是不是需要自己进行提前数据结构规划?
szt1993 发表于 2024-3-25 15:30 | 显示全部楼层
case标签很多,使用查找表可以更高效的完成
您需要登录后才可以回帖 登录 | 注册

本版积分规则

342

主题

2619

帖子

6

粉丝
快速回复 在线客服 返回列表 返回顶部