天天看點

C# Dictionary的用法 KeyValuePair<TKey, TValue> 結構

泛型最常見的用途是泛型集合,命名空間System.Collections.Generic 中包含了一些基于泛型的集合類,使用泛型集合類可以提供更高的類型安全性,還有更高的性能,避免了非泛型集合的重複的裝箱和拆箱。 

簡介

在C#中,Dictionary提供快速的基于兼職的元素查找。當你有很多元素的時候可以使用它。它包含在System.Collections.Generic名空間中。

在使用前,你必須聲明它的鍵類型和值類型

詳細說明

必須包含名空間System.Collection.Generic 

Dictionary裡面的每一個元素都是一個鍵值對(由二個元素組成:鍵和值) 

鍵必須是唯一的,而值不需要唯一的 

鍵和值都可以是任何類型(比如:string, int, 自定義類型,等等) 

通過一個鍵讀取一個值的時間是接近O(1)

建立和初始化一個Dictionary對象

Dictionary<char,int> dic=new Dictionary<char,int>()

//計算字元串中每種字元出現的次數(面試題)。“Welcome to Chinaworld”,不區分大小寫,列印“W2”“e 2”“o 3”……

列子

        static void Main(string[] args)

        {

            //執行個體化對象,聲明它的鍵類型和值類型。結構:Dictionary<[key], [value]> 

            //他的特點是存入對象是需要與[key]值一一對應的存入該泛型 通過某一個一定的[key]去找到對應的值

             Dictionary<char,int> dic=new Dictionary<char,int>();

            string str = "Welcome to C h i naworld";

            //先去掉字元串中的空格,然後轉換為小寫

            str = str.Replace(" ","").ToLower();

            //把字元串轉化為字元數組

            char[] arr = str.ToCharArray();

            //從字元數組中周遊每個字元,然後記錄到Dictionary<char,int>中

            foreach(char c in arr)

            {//如果你嘗試讀取字典中一個不存在的鍵,那麼你會得到一個KeyNotFoundException。

                   所有在讀取一個鍵之前,你必須先使用ContainKey來核對鍵是否存在字典中。

                //判斷Dictionary<char,int> 是否包含相應的key鍵(:就是字元例如'K')

                if (!dic.ContainsKey(c))

                {

                    //如果不存在就添加鍵并給他一個(value)值1

                    dic.Add(c, 1);

                }

                else

                { // 如果存在相應的key鍵(:例如已經有了“k”字元),就對它對應的(value)值+1

                    dic[c] = dic[c] + 1;

                }

            }

            //使用KeyValuePair記錄枚舉字典中的鍵/值,ke.Key, ke.Value擷取鍵對應的值

            foreach(KeyValuePair<char,int> ke in dic)

            {

                Console.WriteLine("{0}出現{1}次\n",ke.Key,ke.Value);

            }

            //

 KeyValuePair<TKey, TValue>

foreach (KeyValuePair<string, string> kvp in openWith)
{
   outputBlock.Text += String.Format("Key = {0}, Value = {1}",
       kvp.Key, kvp.Value) + "\n";
}
      

繼續閱讀