阅读《代码大全》的第18章后,对编写代码时的逻辑判断方法及优化有了新的认识.
总结出的问题如下:
1.为什么要用表驱动法?
表驱动法避免了复杂而又容易出错的多层嵌套逻辑判断语句,它利用原来判断的数据生成键值,利用键值查表来获得相应信息,方便而又易懂.
这种方法将逻辑信息存储在数据中,不但减少了代码量,还为修改程序和维护程序提供了方便.
2.表驱动法的关键环节是什么?
建立表:在这个环节决定表的内容,要将待索引的信息无遗漏的填入表中.
访问表:在这个环节决定使用直接访问,索引访问还是阶梯访问,确定访问方式后,才能正常地查表.
3.使用表驱动法时,如果不能直接将数据作为键值访问表,该用何种方式访问表?
不能直接将数据作为键值的原因有很多,其中一个原因是表中存储的某些种类的信息并不总是与数据一一对应,有些信息对应一个数据,有些信息对应一组数据,这导致索引方式和表需要作出相应改变.
改变的方式之一是复制表中那些对应一组数据的信息,让复制后的信息与原来组内的数据一一对应.这样修改后,就可以继续直接使用数据作为键值访问表,但是由于复制了信息,会造成冗余,占用空间.
另一种方式是在数据上做处理,将对应同一个表中信息的一组数据转化成某个特殊的数据,再让这个特殊的数据于表中的那个信息对应,这样数据经过转化就可以继续作为键值访问表,转化的过程可以专门编写一个子程序.
4.使用表驱动法时,如果作为键值的数据存在很大的空闲部分,直接建表会造成空间的浪费,该如何修改表?
可以建2张表,第一张表用来辅助索引,它以数据为键值,内部存储的是第二张表的键值;第二张表是信息表,内部存储数据对应的信息.这样做可以增强数据与信息的独立性,即使索引表存在空余的部分造成空间的浪费,信息表上的空间也不会有浪费.
5.如果用来查表的数据不是离散的,该用何种方式访问表?
可以为表中每个信息设置一个对应区间,数据落在哪个区间,这个区间对应的信息就是查询的结果.