C#HashTable测试例子
原创
©著作权归作者所有:来自51CTO博客作者wx62d20ab5537c1的原创作品,请联系作者获取转载授权,否则将追究法律责任
李国帅 2007.5
令我没有想到的是可以直接枚举,我竟然在hashtable类成员中找不到如何根据键得到值。从网上也找不到,忽然看到可以枚举,联想到枚举的用法,原来可以直接使用myHT[nCurrentIndex]来设置和读取hash值,帮助中有hashtable的values属性但是不能调用,原来是用枚举器调用。
private Hashtable myHT; private void Page_Load(object sender, System.EventArgs e) { ... myHT = new Hashtable(); } private void Page_Unload(object sender, System.EventArgs e) { myHT.Clear(); } private void InitializeComponent() { ... this.Load += new System.EventHandler(this.Page_Load); this.Unload += new System.EventHandler(this.Page_Unload); } private void GridWareList_ItemCommand(object source, System.Web.UI.WebControls.DataGridCommandEventArgs e) { int nCurrentIndex = e.Item.ItemIndex; switch(e.CommandName) { case "Plus": if (myHT.Contains((int)nCurrentIndex))//因为默认情况下null==0,但是键值不能是null { myHT.Add(nCurrentIndex, int.Parse(((LinkButton)(e.Item.Cells[2].Controls[0])).Text)); } else { myHT[nCurrentIndex] = (int)myHT[nCurrentIndex] + 1; ((LinkButton)(e.Item.Cells[2].Controls[0])).Text = myHT[nCurrentIndex].ToString(); } break; case "minus": if (myHT.Contains((int)nCurrentIndex)) { myHT.Add(nCurrentIndex, int.Parse(((LinkButton)(e.Item.Cells[2].Controls[0])).Text)); } else { if ((int)myHT[nCurrentIndex] > 0) { myHT[nCurrentIndex] = (int)myHT[nCurrentIndex] - 1; ((LinkButton)(e.Item.Cells[2].Controls[0])).Text = myHT[nCurrentIndex].ToString(); } } break; ... } }
|
在C#中应用哈希表(Hashtable)
转载网文2007
一.哈希表(Hashtable)简述
在.NET Framework中,Hashtable是System.Collections命名空间提供的一个容器,用于处理和表现类似key/value的键值对,其中key通常可用来快速查找,同时key是区分大小写;value用于存储对应于key的值。Hashtable中key/value键值对均为object类型,所以Hashtable可以支持任何类型的key/value键值对.
二.哈希表的简单操作
在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value);
在哈希表中去除某个key/value键值对:HashtableObject.Remove(key);
从哈希表中移除所有元素: HashtableObject.Clear();
判断哈希表是否包含特定键key: HashtableObject.Contains(key);
下面控制台程序将包含以上所有操作:
using System;
using System.Collections; //使用Hashtable时,必须引入这个命名空间
class hashtable
{
public static void Main()
{
Hashtable ht=new Hashtable(); //创建一个Hashtable实例
ht.Add("E","e");//添加key/value键值对
ht.Add("A","a");
ht.Add("C","c");
ht.Add("B","b");
string s=(string)ht["A"];
if(ht.Contains("E")) //判断哈希表是否包含特定键,其返回值为true或false
Console.WriteLine("the E key:exist");
ht.Remove("C");//移除一个key/value键值对
Console.WriteLine(ht["A"]);//此处输出a
ht.Clear();//移除所有元素
Console.WriteLine(ht["A"]); //此处将不会有任何输出
}
}
三,遍历哈希表
遍历哈希表需要用到DictionaryEntry Object,代码如下:
for(DictionaryEntry de in ht) //ht为一个Hashtable实例
{
Console.WriteLine(de.Key);//de.Key对应于key/value键值对key
Console.WriteLine(de.Value);//de.Key对应于key/value键值对value
四,对哈希表进行排序
对哈希表进行排序在这里的定义是对key/value键值对中的key按一定规则重新排列,但是实际上这个定义是不能实现的,因为我们无法直接在Hashtable进行对key进行重新排列,如果需要Hashtable提供某种规则的输出,可以采用一种变通的做法:
ArrayList akeys=new ArrayList(ht.Keys); //别忘了导入System.Collections
akeys.Sort(); //按字母顺序进行排序
for(string skey in akeys)
{
Console.Write(skey + ":");
Console.WriteLine(ht[skey]);//排序后输出