索引器哈希表Hashtabl字典Dictionary(转)

Posted 寒夜美美

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了索引器哈希表Hashtabl字典Dictionary(转)相关的知识,希望对你有一定的参考价值。

一、索引器

索引器类似于属性,不同之处在于它们的get访问器采用参数。要声明类或结构上的索引器,使用this关键字。

示例:

 
索引器示例代码
/// <summary>
/// 存储星期几的类。声明了一个get访问器,它接受字符串,并返回相应的整数
/// </summary>
public class 星期
{
    public string[] weeks = { "星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六" };

    //索引器 它接受星期几的字符串,将它作为索引index
    public int this[string day]
    {
       //get访问器 并返回相应的整数
        get
       {
            int i = 0;

            foreach (var item in weeks)
            {
                if (item == day)
                {
                    return i;
                }
                i++;
            }

            //没找到返回-1
            return -1;
        }
    }
}
 

  

 

二、哈希表Hashtable

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类型。  

 
Hashtable示例代码
//方法一
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

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"]++;

以上是关于索引器哈希表Hashtabl字典Dictionary(转)的主要内容,如果未能解决你的问题,请参考以下文章

ConcurrentDictionary与Dictionary

Redis设计与实现 : 字典

你真的了解mysql索引吗?

MySQL中自适应哈希索引

python 字典为啥这么快

第4章 字典