表驱动法简单来说就是把原来须要用类似 switch-case 之类语句来做的事用表的对应关系来做。
它是初学者必备的武器。
查表的方式:
在使用表驱动法的时候必须要解决的一个问题就是如何查表.
我们可以用非常直接的方式查一个表,就如前面示例讲的我就用数组下标就好了,但你发现有谁查字典甚至《数学用表》是直接依靠页码来查的吗?这是肯定行不通的。
常用的查表方式有
1 直接查询
直接查询,是指无需绕圈子,用下标的方式就能顺利的获取到数据;
if(day==1)
{
dayName="星期一";
}
else if(day==2)
{
dayName="星期二";
}
else if(day==0)
{
dayName="星期日";
}
实现同样的功能,我们可以将这些数据存储到一个表里
C#代码 表驱动法获取星期名称
string[] dayNames=new string[]{"星期日","星期一","星期二","星期三","星期四","星期五","星期六"};
dayName=dayNames[day];
只要一条语句就可以代替长长的if-else语句
如果某一天我们的网站要根据访客选择的语言来显示星期几
的话
表驱动法仍然很简单
C#代码 表驱动法获取星期名称
dayName=dayNames[day,
(int)GetUserLanguage()
];
但如果是用if-else的话,那长度可就的翻番啊。
2 索引查找
在用一个简单方法无法将“英文单词”这样数据转换成表下标时,可以考虑使用索引来查找.在.net中的Dictionary<K,V> 就是一个典型的例子
C#代码 获取一个用户对象
Dictionary<string,User> users=GetAllUsers();
User tom=users["Tom"];
其实我们常用的DataTable就可以用索引查找的方式来获取数据
假如有个人员信息的table
C#代码 用索引查找方式从DataTable中获取第一个用户的姓名
DataTable userInfo=dal.GetAllUsersInfo();
name=userInfo.Rows[0].Columns["UserName"];
使用索引查询的主要优点就是代码的可读性大为增强
,
可维护性也更好
C#代码 用直接查找方式从DataTable中获取第一个用户的姓名
DataTable userInfo=dal.GetAllUsersInfo();
name=userInfo.Rows[i].Columns[3];
对比上一段代码,columns[3]很让人不知所谓;此外如果返回的Datable返回的列顺序改变的话就必须更改魔术数字3,否则代码就会出错;
3 分段查找
分段查找通过确定数据所处的范围确定分类(下标)
使用分段查找,需要先把每一个区间的上限写在一个表中,然后通过循环确定所处的区段,最后获得相应的等级
C#示例 根据分数查绩效等级
class Calc
{
private static double[] rangeLimit = { 50.0, 65.0, 75.0, 90.0, 100.0 };
private static string[] grade = { "F", "D", "C", "B", "A" };
private static readonly int maxLevel = grade.Length - 1;
public static string CalculateGrade(double score)
{
int level = 0;
while (level <= maxLevel)
{
if (score < rangeLimit[level]) return grade[level];
else level++;
}
return grade[level ];
}
}
如果你的成绩是 89,那么你的等级应该是 B。上面例子很好懂。但是要注意边界的问题。这是个做范围判断的例子。
表驱动法可以让你省去一大堆令人头晕的条件判断语句,让代码看起来更优雅。本文只是让你对它有一个直观的印象,并不包含它全面的知识。它还包括
定义索引等其它的东西。比如说,上面的等级评定的示例中,负责查找等级的循环明显是程序的主要消耗所在。你可以考虑用二分法之类的方法来节省时间。如果表
中包含的元素数十分巨大怎么办?定义个索引。
最后给一个把 byte[] 转换成它对应的十六进制表示的例子。以前 CSDN 上有人问过,说为什么我用 framework 里的
MD5ServiceProvider 提供的方法来计算,得到的结果不唯一?答案是你的结果没有转换成它的等价的字符串表示。下面是 MSDN
上的方法,有了它,你再用 MD5ServiceProvider 就不会有问题了:
class HexTest
{
static char[] hexDigits = {
'0', '1', '2', '3', '4', '5', '6', '7',
'8', '9', 'A', 'B', 'C', 'D', 'E', 'F'};
public static string ToHexString(byte[] bytes) {
char[] chars = new char[bytes.Length * 2];
for (int i = 0; i < bytes.Length; i++) {
int b = bytes[i];
chars[i * 2] = hexDigits[b >> 4];
chars[i * 2 + 1] = hexDigits[b & 0xF];
}
return new string(chars);
}
static void Main() {
byte[] b = {0x00, 0x12, 0x34, 0x56, 0xAA, 0x55, 0xFF};
Console.WriteLine(ToHexString(b));
}
}
分享到:
相关推荐
Thoughtful Machine Learning with Python: A Test-Driven Approach English | 25 Aug. 2016 | ISBN: 1491924136 | 250 Pages | AZW3/MOBI/EPUB/PDF (conv) | 16.77 MB By teaching you how to code machine-...
Thoughtful Machine Learning with Python A Test-Driven Approach 英文无水印pdf 正式版 pdf使用FoxitReader和PDF-XChangeViewer测试可以打开
3. **测试计划**:创建和执行有效的测试计划,包括确定测试范围、选择测试方法、分配资源和时间表。 4. **测试用例设计**:如何设计具有代表性和覆盖全面的测试用例,以发现各种类型的错误。 5. **缺陷管理**:...
use case driven approach for software engineering. chm version...................
Android 6 for Programmers: An App-Driven Approach presents leading-edge mobile computing technologies for professional software developers. In our app-driven approach, we present concepts in complete ...
**标题:**表驱动方法(Table Driven Methods) 在编程领域,表驱动方法是一种设计模式,它提倡将复杂的逻辑结构转化为数据表格的形式,从而简化代码并提高可维护性。这种技术通常用来替代传统的if-else或switch...
《Thoughtful Machine Learning with Python: A Test-Driven Approach》是一本关于Python机器学习的书籍,采用了测试驱动的方法来构建机器学习模型。中文版得到了广泛的认可和推荐,是很多专业人士推荐的读物。 2. ...
标题“使用策略驱动的方法来实现软件定义网络(A Policy Driven Approach to Software Defined Networking)”指出了软件定义网络(SDN)的一个关键实施手段。策略驱动(Policy Driven)意味着网络的管理不是依靠...
本书名为《Thoughtful Machine Learning with Python: A Test-Driven Approach》,作者是Matthew Kirk。本书采用测试驱动的方法来讲解机器学习,通过Python编程语言的使用,向读者展示如何构建稳健、可扩展的机器...
标题:“iOS 8 for Programmers An App-Driven Approach 3rd”表明本书是面向程序员的,以应用程序为驱动方法介绍iOS 8操作系统,而且这是第三版,意味着之前已有两版内容的沉淀和技术更新。此书的命名暗示它涵盖...
### Modelling and Generating AJAX Applications: A Model-Driven Approach #### Introduction AJAX (Asynchronous JavaScript and XML) represents a significant shift in the way interactive web applications...
事件驱动系统通过响应特定事件或消息来触发服务的执行,而不是依赖于预定的时间表或者周期性的检查。这种方法可以显著提升系统的性能和可维护性,特别是在处理大量并发请求时。此外,这种方法还能帮助开发者更好地...
- **书名**:“Thoughtful Machine Learning with Python: A Test-Driven Approach” - **作者**:Matthew Kirk - **出版年份**:2016年 - **出版社**:O’Reilly Media, Inc. 本书通过融合测试驱动开发(TDD)与机器...
测试驱动开发(Test-Driven Development,简称TDD)是一种软件开发方法论,它强调在编写实际功能代码之前先编写测试代码。在这个过程中,开发者首先定义一个单元测试来描述即将要实现的功能,然后编写最少的代码使得...
在CRC表驱动程序中,这个多项式被用来生成一个查表,这个表用于快速计算出校验码。 标题"CRC table-driven Program with C CODE"指出,这是一个使用C语言编写的CRC校验程序,它利用了查表法来提高计算效率。这种...