C#视频中提到了哈希表,这个词有点新鲜,以前没接触过,而且看完视频以后觉得对这个哈希表的理解还是有点晕乎乎的,所以我就上网去查了一下有关哈希表的介绍。
哈希表,也叫散列表,是根绝关键码值(Keyvalue)而直接进行访问的数据结构。也就是说,它通过把关键码值映射到表中的一个位置来访问记录,以加快查找速度。这个映射函数叫做散列函数,存放记录的数组叫做散列表。
给定表M,存在函数f(key),对任意给定的关键字值key,代入函数后若能得到包含该关键字的记录在表中的地址,则称表M为哈希(Hash)表,函数f(key)为哈希函数。
添加数据都是以“键值对”的形式。比如:
Hashtable ht = new Hashtable();
ht.Add("2017", "你好");//Key值为‘2017’,value值为‘你好’
因为我们添加的数据的类型不能确定是什么类型,所以我们可以采用最高等级的类型——object类型
“键值对”中Key键不能重复,否则对value值定义无效。当不包含Key值,只有value时,value值无意义且不显示。
Hashtable使用键作为寻找的方式,是一种无序的结构。也就是说,当我们读取hashtable中存取的值的时候,读取到的数据是乱序的。
foreach (数据类型 标识符 in 表达式)
{
//循环体
//循环体中“局部变量”表示集合中遍历的数据
}
其中 标识符 可以修改为自己的一个命名(不与系统中默认字段冲突的),比如,默认的foreach循环是
foreach (varitem in collection)
{
//循环体
//循环体中“局部变量”表示集合中遍历的数据
}
但是我们经过修改可以变成
foreach (objectabc in collection)
{
//循环体
//循环体中“局部变量”表示集合中遍历的数据
}
将var变为object后,可容性更高一些,我们可以利用哈希表进行繁简转换,将简体字作为Key值,繁体字作为value值,经过与Key值的对比可以翻译为对应的value值,达到翻译的过程。
#region 简体字
private const string Jian = "我从山中来,带得兰花草。";
#endregion
#region 繁体字
private const string HXw = "我從山中來,帶得蘭花草。";
#endregion
#region 文章
private const string text = "我从山中带的兰花。";
#endregion
static void Main(string[] args)
{
//利用哈希表进行繁简转换
Hashtable ht = new Hashtable();
for (int i = 0; i < Jian.Length;i++)
{
ht.Add(Jian[i],HXw[i]);
}
//Console.ReadKey();
for (int i = 0; i < text.Length;i++)
{
if (ht.ContainsKey(text[i]))
{
Console.Write(ht[text[i]]);
}
else
{
Console.Write(text[i]);
}
}
Console.ReadKey();
}
输出结果为:
需要注意的是,foreach循环一旦开始,除非遇到break,否则会一直循环到结束。
以上代码均经作者亲自测试,初学哈希表,个人理解难免有些偏差,希望大家多多指正。