表驱动的认识以及用法——原创——非抄书

  

表驱动是什么:通过查找数据表来代替复杂的逻辑结构(如如果……其他的……

、开关等);   

表驱动的优点是:1,将编程的重心调整到解决问题上,而不是复杂的逻辑判断;
2,增加了程序的灵活性,易添加,易修改。
3,数据驱动,如果将数据写入文件,每次启动时,从文件中读取,那么,如果要修改一些变量,可能直接修改数据文件,而不是去修改程序结构;

  

表驱动的三种方法:
1,直接驱动法:你需要找什么,指定索引,就可以给你立即返回索引在表中对应的元素或者动作,

  
 <代码>案例1:(一维查找:即可以代替一层的如果结构或者开关结构):
  比如你要查找1——12月份每个月的天数,如下:
  month_day[12]={30 31日,30日,29日,30日,31日31日31日,30日,30日,31日30};
  返回month_day [5];
  这样直接对应的就是5月的天数;
  直接驱动是指索引和需要的得到的数据或者动作是直接对应关系;
  
  案例2:(三维查找:即有三个条件同时限制,如果使用如果或者开关可能需要三层嵌套结构)
  
  比如一个路由景点,收费标准因性别:是否学生,以及是否残疾三项共同决定门票的价格,那么,我们可以
  使用三维数据驱动表来代替复杂的上层如果语句;
  
  int entrance_ticket_fee [] [] []={{{0,10},{0,15}},{{0,15},{15、30}}}
  这是一个三维向量,三个维度分别代表了不同的限制,
  第一维代表性别,索引0代表女,1代表男;
  第二维代表是否是学生,索引0代表是,索引1代表不是;
  第三维代表是否是残疾,索引0代表残疾,索引1代表健康;
  以上这个三维数组代表的是:
  女孩,学生,残疾0元
  女孩,学生,健康10元;
  女孩,非学生,残疾0元;
  女孩,非学生,非常急15元;
  
  男孩,学生,残疾0元;
  男孩,学生,健康,15元;
  男孩,非学生,残疾15元;
  男孩,非学生,健康,30元;
  
  通过给定性别:是否是学生,是否残疾,来确定其返回值;
  返回entrance_ticket_fee[0][1][1]//15元;
  
  2,索引驱动法:
  由于很多情况,有分段时,各段情况不一样,比如按年龄来分,18岁以下和60岁以上的人景区门票按照标准减一半,而19岁—59之
  间的人,门票和年龄相对应,那么,如果还用直接索引法的话,对于0 - 18岁以下和60岁以上,都对应一个数值,那么其实可以用
  一个索引来代替,这样就节省了空间,这种转化通过函数来实现;
  索引驱动是对直接驱动法在节约空间方面的改进;
  
  3阶梯访问表:
  很多问题,并不需要一对一,而是要将其进行归类,简单的例子,比如说按成绩分类:
  100 - 90:A
  89 - 80:B
  79 - 60:C
  59 - 0:D
  给定一个数,判断其所在的范围,即可以云阶梯访问。
  
  阶梯访问是通过将要对比的数(原数据)和各个区域的上限(或者下限)进行比较,可以选择顺序比较,也可以选择二分法之类的。
  
  阶梯访问是对索引驱动法的在节约内存空间方面的再次改进 

表驱动的认识以及用法——原创——非抄书