C# 用哈希表搜索对象
2009-03-09 08:19:57 来源:WEB开发网社会保险号满足了一个好的hash key的要求:它不会改变,它可以合理地分配、value取决于号码而不是reference。(你需要运用基于value的hash key而不是基于reference的hash key以避免我以前提到过的问题。)运用这个hash key来查找对象也很简单:
int ssn = Int32.Parse(this.SSN.Text);
currentEmp = (Employee)members[ssn];
if (currentEmp != null)
{
LastName.Text = currentEmp.LastName;
FirstName.Text =
currentEmp.FirstName;
Salary.Text =
currentEmp.Salary.ToString ();
} else
LastName.Text = "Not Found";
在C#中,你可以用数组语法在哈希表中查找对象。该语法强调了恒定时间搜索的概念:你可以把数组访问看做是一个快速的操作,而不是一个代价很高的函数调用。
关于哈希表最后的一个重点是,同所有的集合一样,它们也存储引用(references)。你不需要任何额外的工作来更新哈希表中的对象。一旦你引用了哈希表中的一个对象,你可以随意修改它。记住,同样的原则不适用于keys。你可以编写代码来改变keys,但如果那个代码修改了hash value,你就会丢失你的集合中的对象。
哈希表是很有用的、有效的容器。但是,要有效地运用它们,你需要了解容器和容器中对象的状态之间的关系。当你可以用从对象计算得来的不变的value来搜索对象时,哈希表就很有用。如果你用不同的顺序(通过姓名、社会保险号、或年龄)在对象中搜索,那么哈希表就不那么有用了。
Bill Wagner是 SRT Solutions 的Windows技术专家。他是 Visual Studio Magazine 的撰稿编辑,也是 The C# Core Language Little Black Book 一书的作者,这是一本C#开发人员的高级参考书。在16年的软件开发实践中,Bill在许多项目中都是重要的开发人员。他曾为工程和商务应用程序、桌面和Web环境开发过软件。他在2D和3D图象和多媒体软件方面也很有经验,包括为The Lion King Animated Storybook开发的视频回放引擎。他的联系方式是 wwagner@SRTSolutions.com。
更多精彩
赞助商链接