首页 > 代码库 > 哈希表和字典的应用

哈希表和字典的应用

Egg:

                string x = string.Empty;
                string y = string.Empty;
                Hashtable ht = new Hashtable();
                ht.Add("12", "ab");
                ht.Add("34", "cd");
                foreach (DictionaryEntry i in ht)
                {
                    x = x + i.Key.ToString();
                    y = y + i.Value.ToString();
                }
                Response.Write(x);
                Response.Write("             " + y);
                //效A果G   1234 abcd

                //Dictionary<int,int> dt = new Dictionary<int,int>();
                //dt.Add(1,1);
                //dt.Add(2,2);
                //dt.Add(3,3);
                //foreach (var i in dt)
                //{
                //    Response.Write(i.Value);
                //}
                //效A果G  123

 

哈希表Hashtabl

Hastable是哈希表的实现,能根据关键字取关键值,这key的类型是object, value的类型也是object。

在哈希表中添加一个key/value键值对:HashtableObject.Add(key,value);

在哈希表中去除某个key/value键值对:HashtableObject.Remove(key);

从哈希表中移除所有元素:                  HashtableObject.Clear(); 

判断哈希表是否包含特定键key:          HashtableObject.Contains(key);

遍历Hashtable对象的两种方法:

由于Hashtable每个元素都是一个键/值对,因此元素类型既不是键的类型,也不是值的类型,而是DictionaryEntry类型。  

 
 
//方法一
foreach (System.Collections.DictionaryEntry de in myHashtable)
{
    //注意HastTable内存储的默认类型是object,需要进行转换才可以输出
    Console.WriteLine(de.Key.ToString());
    Console.WriteLine(de.Value.ToString());
}


//方法二
System.Collections.IDictionaryEnumerator enumerator = myHashtable.GetEnumerator();

while (enumerator.MoveNext())
{
    Console.WriteLine(enumerator.Key);       // Hashtable关健字
    Console.WriteLine(enumerator.Value);      // Hashtable值
}
 
 

 

字典Dictionary

  1.  Dictionary的描述

    1、从一组键(Key)到一组值(Value)的映射,每一个添加项都是由一个值及其相关连的键组成

    2、任何键都必须是唯一的

    3、键不能为空引用null(VB中的Nothing),若值为引用类型,则可以为空值

    4、Key和Value可以是任何类型(string,int,custom class 等)

     

  2.  Dictionary常用用法:以 key 的类型为 int , value的类型为string 为例

     

     1、创建及初始化

     Dictionary<int,string>myDictionary=newDictionary<int,string>();

     

     2、添加元素

    myDictionary.Add(1,"C#");

    myDictionary.Add(2,"C++");

    myDictionary.Add(3,"ASP.NET");

    myDictionary.Add(4,"MVC");

     

     3、通过Key查找元素

    if(myDictionary.ContainsKey(1))

    {

    Console.WriteLine("Key:{0},Value:{1}","1", myDictionary[1]);

     }

     

     4、通过KeyValuePair遍历元素

    foreach(KeyValuePair<int,string>kvp in myDictionary)

    ...{

    Console.WriteLine("Key = {0}, Value = http://www.mamicode.com/{1}",kvp.Key, kvp.Value);

    }

     

    5、仅遍历键 Keys 属性

    Dictionary<int,string>.KeyCollection keyCol=myDictionary.Keys;

    foreach(intkeyinkeyCol)

    ...{

    Console.WriteLine("Key = {0}", key);

    }

     

    6、仅遍历值 Valus属性

    Dictionary<int,string>.ValueCollection valueCol=myDictionary.Values;

    foreach(stringvalueinvalueCol)

    ...{

    Console.WriteLine("Value = http://www.mamicode.com/{0}", value);

    }

     

    7、通过Remove方法移除指定的键值

    myDictionary.Remove(1);

    if(myDictionary.ContainsKey(1))

    ...{

      Console.WriteLine("Key:{0},Value:{1}","1", myDictionary[1]);

    }

    else

    {

    Console.WriteLine("不存在 Key : 1"); 

     }

  3. 其它常见属性和方法的说明:

     

      Comparer:           获取用于确定字典中的键是否相等的 IEqualityComparer。

      Count:                  获取包含在 Dictionary中的键/值对的数目。

      Item:                    获取或设置与指定的键相关联的值。

      Keys:                   获取包含 Dictionary中的键的集合。

      Values:                获取包含 Dictionary中的值的集合。

      Add:                    将指定的键和值添加到字典中。

      Clear:                  从 Dictionary中移除所有的键和值。

      ContainsKey:      确定 Dictionary是否包含指定的键。

      ContainsValue:   确定 Dictionary是否包含特定值。             

      GetEnumerator:  返回循环访问 Dictionary的枚举数。

      GetType:             获取当前实例的 Type。 (从 Object 继承。)

      Remove:             从 Dictionary中移除所指定的键的值。

      ToString:             返回表示当前 Object的 String。 (从 Object 继承。)

      TryGetValue:      获取与指定的键相关联的值。

Dictionary<Tkey,Tvalue>是Hastbale的泛型实现。 

 
//遍历键
foreach (string key in myDictionary.Keys)
{
    //遍历某键的值
    foreach (string val in myDictionary[key])
    {

    }
}
 

 

由于 Dictionary 是键和值的集合,因此元素类型并非键类型或值类型。相反,元素类型是键类型和值类型的 KeyValuePair。 

 
字典遍历示例
foreach (KeyValuePair<string, string> kvp in myDictionary)
{
    string key = kvp.Key;//key包含了字典里的键
    for (int i = 0; i < kvp.Value.Count; i++)
    {
        Response.Write(kvp.Value[i]);
    }
}
 

 

示例: 

 

代码

//定义一个<string,int>的Dictionary,让它的值进行添加(也可以用Add方法)
Dictionary<string, int> dic = new Dictionary<string, int>();

//添加两个键为"成绩1","成绩2";并为它们的值赋为0
dic["成绩1"] = 0;
dic["成绩2"] = 0;

// 把这两个值分别加1
dic["成绩1"]++;
dic["成绩2"]++;

哈希表和字典的应用