C#編程(五十三)----------字典Dictionary<TKey,TValue>

來源:互聯網
上載者:User

標籤:tostring   not   訪問   異常   equal   等於   hashcode   int   tar   

字典

關鍵字:Dicitionary

 

說明:

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

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

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

鍵和值都可以是任意類型(例如:string,int,自訂類型,等等)

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

索引值對之間的偏序可以不定義

 

 

使用案例:

using System;

using System.Collections.Generic;

using System.Linq;

using System.Text;

using System.Threading.Tasks;

using System.Collections.Generic;

namespace 字典

{

    class Program

    {

        static void Main(string[] args)

        {

            //定義

            Dictionary<string, string> openWith = new Dictionary<string, string>();

 

            //添加元素

            openWith.Add("txt", "notepad.exe");

            openWith.Add("bmp", "paint.exe");

            openWith.Add("dib", "paint.exe");

            openWith.Add("rtf", "wordpad.exe");

 

            //取值

            Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

 

            //更改值

            openWith["rtf"] = "winword.exe";

            //查看

            Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);

 

            //遍曆Key

            foreach (var item in openWith.Keys)

            {

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

            }

 

            //遍曆value

            foreach (var item in openWith.Values)

            {

                Console.WriteLine("value = {0}", item);

            }

 

            //遍曆value的第二種方法

            Dictionary<string, string>.ValueCollection valueColl = openWith.Values;

            foreach (var item in valueColl)

            {

                Console.WriteLine("value = {0}", item);

            }

 

 

            //遍曆字典

            foreach (KeyValuePair<string, string> item in openWith)

            {

Console.WriteLine("key = {0} , value = {1} ", item.Key, item.Value);

            }

 

            //添加存在的元素

            try

            {

                openWith.Add("txt", "winword.exe");

            }

            catch (ArgumentException)

            {

                Console.WriteLine("An element with Key = \"txt\" already exists.");

            }

 

 

            //刪除元素

            openWith.Remove("doc");

            if (!openWith.ContainsKey("doc"))

            {

                Console.WriteLine("Key \"doc\" is not found.");

            }

 

            //判斷鍵存在

            if (openWith.ContainsKey("bmp"))

            {

                Console.WriteLine("An element with Key = \"bmp\" exists.");

            }

 

            //參數為其他類型

            Dictionary<int, string[]> OtherType = new Dictionary<int, string[]>();

            OtherType.Add(1, "1,11,111".Split(‘,‘));

            OtherType.Add(2, "2,22,222".Split(‘,‘));

            Console.WriteLine("其他類型 : " + OtherType[1][2]);

 

 

            //參數為自訂類型

            //聲明並添加元素

            Dictionary<int, DouCube> MyType = new Dictionary<int, DouCube>();

            for (int i = 1; i <= 9; i++)

            {

                DouCube element = new DouCube();

                element.Code = i * 100;

                element.Page = "http://www.doucube.com/" + i.ToString() + ".html";

                MyType.Add(i, element);

            }

 

 

            //遍曆元素

 

            foreach (KeyValuePair<int, DouCube> kvp in MyType)

            {

                Console.WriteLine("Index {0} Code:{1} Page:{2}", kvp.Key, kvp.Value.Code, kvp.Value.Page);

            }

        }

 

    }

    public class DouCube

    {

        public int Code { get { return _Code; } set { _Code = value; } } private int _Code;

        public string Page { get { return _Page; } set { _Page = value; } } private string _Page;

    }

}

 

 

常用屬性

名稱

說明

Comparer

擷取用於確定字典中的鍵是否相等的IEqualityComParer<T>

Count

擷取包含在Dictionary<TKey,TValue>中的鍵/值對的數目

Item

擷取或設定與指定的鍵相關聯的值

Keys

擷取包含Dictionary<TKey,TValue>中的鍵的集合

Values

擷取包含Dictionary<TKey,TValue>中的值的集合

 

常用方法

名稱

說明

Add

將指定的鍵和值添加到字典中

Clear

從Dictionary<TKey,TValue>中移除所有的鍵和值

ContainsKey

確定Dictionary<TKey,TValue>是否包含指定的鍵

ContainsValue

確定Dictionary<TKey,TValue>是否包含指定的值

Equals(object)

確定指定的Object是否等於當前的object(繼承自object)

Finalize

允許對象在”記憶體回收”回收之前嘗試釋放資源並執行其他清理操作(繼承自object)

GetEnumerator

返回逐一查看Dictionary<TKey,TValue>的列舉程式

GetHashCode

用作特定類型的雜湊函數(繼承自object)

GetObjectData

實現System.Runtime.Serialization.ISerializable介面,並返回序列化Dictionary<TKey,TValue>執行個體所需的資料

GetType

擷取當前執行個體的Type(繼承自Object)

MemberwiseClone

建立當前object的淺表副本(繼承自Object)

OnDeserialization

實現System.Runtime.Serialization.ISerializable介面,並在完成還原序列化之後引發序列化事件

Remove

從Dictionary<TKey,Tvalue>中移除所指定的鍵的值

ToString

返回表示當前對象的字串

TryGetValue

擷取與指定的鍵相關聯的值.

 

 

 

總結Dictionary:

字典也稱為映射表或散列表,主要特定是可以根據鍵快速尋找值,也可以自由刪除添加元素,在刪除添加時,不會像列表一樣,移動之後的所有元素,產生記憶體的開銷.

.NET中提供了幾個字典,可以使用最主要的類是Dictionary<TKey,TValue>,這個類與我們上面說的SoreedList用法完全一樣.

鍵的類型:

用作字典中鍵的類型必須重寫object類中的GetHashCode()方法,只要字典類需要確定元素的位置,就要調用本方法.

字典內部通過調用這個方法的傳回值,來計算產生散列(這是一個演算法,不去研究,它涉及一個素數),所以字典的容量是一個素數.

GetHashCode()方法的實現需要遵循以下幾點:

1.相同的對象應總是返回相同的值

2.不同的對象可以返回相同的值

3.應執行額比較快,計算的開銷不大

4.不能拋出異常

5.應至少使用一個執行個體欄位

6.散列碼值應平均分布在int可以儲存的整個數字地區

7.散列碼最好在對象的生存期中不發生變化

 

 

提示:字典的效能取決於GetHashCode()方法的實現代碼

C#編程(五十三)----------字典Dictionary<TKey,TValue>

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.