持续创作,加速成长!这是我参与「掘金日新计划 · 6 月更文挑战」的第5天。
有一种比 if-else 和 switch 更好用的条件查询语句,相信很多人都忽略了,那就是查找表。当有大量离散值需要测试的时候,就是查找表的用武之地了。
查找表的定义
给定一个由同一类型的数据元素(或记录)构成的集合,从中查找指定数据项(或数据元素某个特征)的数据元素或记录,这就是查找表。
我们可以使用数组和普通对象来构建查找表,通过查找表访问数据性能会提升2倍或以上。
优点
- 速度快
- 可读性好
- 更适合离散数据
查找表的主要操作
- 查询某个“特定的”数据元素是否在查找表中
- 检索某个“特定的”数据元素的各种属性
- 在查找表中插入一个数据元素
- 从查找表中删去某个数据元素
实例
笨重的 switch 语句:
switch(value){
case 0:
return result0
case 1:
return result1
case 2:
return result2
case 3:
return result3
case 4:
return result4
case 5:
return result5
case 6:
return result6
case 7:
return result7
case 8:
return result8
case 9:
return result9
case 10:
return result10
}
swtich 表达式代码所占的空间与它的重要性不成比例,这个时候我们可以优化为查找表的形式:
// 将返回值集合存入数组
var results = [result0, result1, result2, result3, result4, result5, result6, result7, result8, result9, result10]
// 返回当前结果
return results[value]
怎么样,是不是简单又明了,一秒钟就完成了复杂又又臃肿的代码。
使用查找表,我们可以不用书写任何条件判断语句,几遍候选值数量增加,也机会不会产生额外的性能开销。
当单个的键值存在逻辑映射的时候,查找表的优势就更加明显了。是不是很 nice ?!
题外话:switch语句更适合每个键都需要对应一个独特的动作或一系列动作的场合。