第十八章:表驱动法
章节目录
- 1.表驱动法使用总则
- 2.直接访问表
- 3.间接访问表
- 4.阶梯访问表
1.表驱动法使用总则
表驱动法是一种编程模式–从表中查找信息而不使用逻辑判断,在适当情况下,使用表驱动法实现代码会比逻辑代码更简单、更容易修改、更高效
###使用表驱动法要解决两个问题:
-
怎样从表中查询条目?
1.直接访问:适合简单数据例如月份(1~12)
2.间接访问:适合索引范围很大的数据例如电话号码(xxx-xx-xxxx)
3.阶梯访问:适合按照范围划分的、无规律分布数据
-
应该在表中存什么?
1.数据:可以储存数据
2.动作:可以储存描述某次操作的代码
3.子程序引用:可以储存子程序引用,直接调用
2.直接访问表
你可以直接在表中访问到你想要的条目,这种情况叫做直接访问表
要点:
- 将数据直接存储在所有因素索引的数组里
- 将某种动作存储在所有因素索引的数组里,从数组种查询到对应的动作描述,然后依次执行原子动作
- 构造查询键值,对于范围性的数据(0~17),可以选择复制信息从而能够直接使用键值,或者转换键值使其能够直接使用
适用范围:
- 数据分布是连续的(中间不能出现太大空白,否则会有空间浪费)
3.索引访问表
先从一张索引表中查出键值,再用这一键值在主表中查出你感兴趣的主数据
要点
- 索引表中包含了所有索引范围,主表中只包含了储存的数据
适用范围
- 索引范围很大然而表中所含记录远远小于索引范围时
- 经常对数据进行操作
- 数据需要经常更新
4.阶梯访问表
表中的记录对于不同的数据范围有效而不是对不同的数据点有效
要点
- 创建一个区间表用于存储每一个区间的上限
- 创建一个等级表用于存储每个区间的值
- 使用一个循环判断数据处于哪个区间,再从等级表中读取数据
适用范围
- 数据按照范围划分并且无规则分布