C#中Dictionary的用法总结
可以实现通过键值查找、插入、删除一个键-值对的操作,这些如果用数组实现都非常麻烦。
Key就是键,value就是值,
我们在很多地方都会用到字典,他的特点就是查找很快,当然比List快。
字典必须包含名空间System.Collection.Generic
Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)
键必须是唯一的,而值不需要唯一的
键和值都可以是任何类型(比如:string, int, 自定义类型,等等)
常用属性
名称 说明
Comparer 获取用于确定字典中的键是否相等的 IEqualityComparer
Count 获取包含在 Dictionary
Item 获取或设置与指定的键相关联的值。
Keys 获取包含 Dictionary
Values 获取包含 Dictionary
常用方法
名称 说明
Add 将指定的键和值添加到字典中。
Clear 从 Dictionary
ContainsKey 确定 Dictionary
ContainsValue 确定 Dictionary
Equals(Object) 确定指定的 Object 是否等于当前的 Object。 (继承自 Object。)
Finalize 允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。 (继承自 Object。)
GetEnumerator 返回循环访问 Dictionary
GetHashCode 用作特定类型的哈希函数。 (继承自 Object。)
GetObjectData 实现 System.Runtime.Serialization.ISerializable 接口,并返回序列化 Dictionary
GetType 获取当前实例的 Type。 (继承自 Object。)
MemberwiseClone 创建当前 Object 的浅表副本。 (继承自 Object。)
OnDeserialization 实现 System.Runtime.Serialization.ISerializable 接口,并在完成反序列化之后引发反序列化事件。
Remove 从 Dictionary
ToString 返回表示当前对象的字符串。 (继承自 Object。)
TryGetValue 获取与指定的键相关联的值。
例子如下:
Person.cs
using System; namespace SampleList { class Person { public string name; public int age; //构造函数 public Person(string name, int age) { this.name = name; this.age = age; } } }
CustomDictionary.cs
using System; using System.Collections.Generic; namespace SampleList { class CustomDictionary { //定义一个字典变量 static DictionarydicPerson = new Dictionary (); public static void LearnDictionaryInfo() { //添加键值 Person p1 = new Person("hjc", 22); Person p2 = new Person("tf", 21); dicPerson.Add(0, p1); //方式1 dicPerson[1] = p2; //方式2 //取值 Console.WriteLine("\n"); Console.WriteLine("取值 name:" + dicPerson[0].name + "—" + "age:" + dicPerson[0].age); //改值 Console.WriteLine("\n"); dicPerson[1].age = 20; Console.WriteLine("改值 name:" + dicPerson[1].name + "—" + "age:" + dicPerson[1].age); //遍历key Console.WriteLine("\n"); Console.WriteLine("遍历 key"); foreach (int key in dicPerson.Keys) { string id = "用户ID:" + key; string str = string.Format("name:{0} age:{1}", dicPerson[key].name, dicPerson[key].age); Console.WriteLine(id + "\t" + str); } //遍历value Console.WriteLine("\n"); Console.WriteLine("遍历 value"); foreach (Person value in dicPerson.Values) { string str = string.Format("name:{0} age:{1}", value.name, value.age); Console.WriteLine(str); } //遍历字典 Console.WriteLine("\n"); Console.WriteLine("遍历字典"); foreach (KeyValuePair kvp in dicPerson) { string str = string.Format("key:{0}/name:{1}/age:{2}", kvp.Key, kvp.Value.name, kvp.Value.age); Console.WriteLine(str); } // 删除元素 Console.WriteLine("\n"); Console.WriteLine("删除元素"); if (dicPerson.ContainsKey(1)) //如果存在 dicPerson.Remove(1); foreach (Person value in dicPerson.Values) { string str = string.Format("name:{0} age:{1}", value.name, value.age); Console.WriteLine(str); } //清除所有的元素 dicPerson.Clear(); Console.Read(); } } }