网站链接: 我爱捣鼓
当前位置: 首页 > web开发  > Asp.net/C#

C# Dictionary字典类一看就懂的好教程

2021/4/7 22:08:24

在C#中,Dictionary提供快速的基于兼职的元素查找。他的结构是这样的:Dictionary<[key], [value]> ,当你有很多元素的时候可以使用它。它包含在System.Collections.Generic名空间中。在使用前,你必须声明它的键类型和值类型。下面我们就来详细介绍一下Dictionary的…

       在C#中,Dictionary提供快速的基于兼职的元素查找。他的结构是这样的:Dictionary<[key], [value]> ,当你有很多元素的时候可以使用它。它包含在System.Collections.Generic名空间中。在使用前,你必须声明它的键类型和值类型。下面我们就来详细介绍一下Dictionary的具体使用方法。            

            说 明

            必须包含名空间System.Collection.Generic 

            Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值) 

            键必须是唯一的,而值不需要唯一的 

            键和值都可以是任何类型(比如:string, int, 自定义类型,等等) 

            通过一个键读取一个值的时间是接近O(1) 

            键值对之间的偏序可以不定义

        使用方法:

        

            //定义
            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 (string key in openWith.Keys)
            {
                Console.WriteLine("Key = {0}", key);
            }
            //遍历value
            foreach (string value in openWith.Values)
            {
                Console.WriteLine("value = {0}", value);
            }
            //遍历value, Second Method
            Dictionary<string, string>.ValueCollection valueColl = openWith.Values;
            foreach (string s in valueColl)
            {
                Console.WriteLine("Second Method, Value = {0}", s);
            }
            //遍历字典
            foreach (KeyValuePair<string, string> kvp in openWith)
            {
                Console.WriteLine("Key = {0}, Value = {1}", kvp.Key, kvp.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")) // True 
            {
                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]);

        参数为自定义类型        

        首先定义类

            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;
            }

        然后

            //声明并添加元素
            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);
            }


        常用属性

            名称                                        说明

            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            返回表示当前对象的字符串。 (继承自 Object。)

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


相关资讯

  • C#怎么获取文件夹里所有的图片文件?

    在实际的程序开发中,我们经常需要获取某个文件夹下的所有图片,用到了C#的DirectoryInfo、GetFiles等文件操作方法,具体实现如下://自定义一个结构public struct sFileInfo{ public string FileName; public DateTime FileCreateTime;}protected void Page_Load(…

    2021/3/4 21:48:01
  • c#实现日期时间与unix时间戳互相转换

    为什么使用时间戳?关于Unix时间戳,大概是这个意思,从1970年0时0分0秒开始到现在的秒数.使用它来获得的是一个INT值,储存在数据库里只要使用INT格式就可以了,方便数据库进行排序,搜索,而且比datetime格式更节省数据库空间。 /// <summary> /// Uni…

    2021/3/4 21:40:22