前言:
今天这篇文章是对Dictionary类的学习,Dictionary类是一个字典序,我们在编程中经常用到,它算是enum枚举类型和list类型的结合,是以键值对的形式去存储值的,那么你会这个知识点不,不会那么今天这篇文章我们一起来学习一下吧,创作不易,大家顺便点点赞吧,你的点赞收藏关注,是我写文章的动力,栓Q啦。
Dictionary类注意点
- 必须包含名空间System.Collection.Generic
- Dictionary里面的每一个元素都是一个键值对(由二个元素组成:键和值)
- 键必须是唯一的,而值不需要唯一的
- 键和值都可以是任何类型(比如:string, int, 自定义类型,等等)
- 通过一个键读取一个值的时间是接近O(1)
- 键值对之间的偏序可以不定义
Dictionary类构造函数
构造函数
Dictionary<TKey,TValue>()
初始化 Dictionary<TKey,TValue> 类的新实例,该实例为空且具有默认的初始容量,并使用键类型的默认相等比较器
Dictionary<TKey,TValue>(IDictionary<TKey,TValue>)
初始化 Dictionary<TKey,TValue> 类的新实例,该实例包含从指定的 IDictionary<TKey,TValue> 中复制的元素并为键类型使用默认的相等比较器。
Dictionary<TKey,TValue>(IDictionary<TKey,TValue>, IEqualityComparer)
初始化 Dictionary<TKey,TValue> 类的新实例,该实例包含从指定的 IDictionary<TKey,TValue> 中复制的元素并使用指定的 IEqualityComparer。
Dictionary<TKey,TValue>(IEqualityComparer)
初始化 Dictionary<TKey,TValue> 类的新实例,该实例为空,具有默认的初始容量并使用指定的 IEqualityComparer。
Dictionary<TKey,TValue>(Int32)
初始化 Dictionary<TKey,TValue> 类的新实例,该实例为空且具有指定的初始容量,并为键类型使用默认的相等比较器。
Dictionary<TKey,TValue>(Int32, IEqualityComparer)
初始化 Dictionary<TKey,TValue> 类的新实例,该实例为空,具有指定的初始容量并使用指定的 IEqualityComparer。
Dictionary<TKey,TValue>(SerializationInfo, StreamingContext)
用序列化数据初始化 Dictionary<TKey,TValue> 类的新实例。
Dictionary类方法和属性
属性
Comparer
获取用于确定字典中的键是否相等的 IEqualityComparer。
Count
获取包含在 Dictionary<TKey,TValue> 中的键/值对的数目。
Item[TKey]
获取或设置与指定的键关联的值。
Keys
获得一个包含 Dictionary<TKey,TValue> 中的键的集合。
Values
获得一个包含 Dictionary<TKey,TValue> 中的值的集合。
方法
Add(TKey, TValue)
将指定的键和值添加到字典中。
Clear()
将所有键和值从 Dictionary<TKey,TValue> 中移除。
ContainsKey(TKey)
确定是否 Dictionary<TKey,TValue> 包含指定键。
ContainsValue(TValue)
确定 Dictionary<TKey,TValue> 是否包含特定值。
Equals(Object)
确定指定对象是否等于当前对象(继承自 Object)
GetEnumerator()
返回循环访问 Dictionary<TKey,TValue> 的枚举数。
GetHashCode()
作为默认哈希函数。(继承自 Object)
GetObjectData(SerializationInfo, StreamingContext)
实现 ISerializable 接口,并返回序列化 Dictionary<TKey,TValue> 实例所需的数据。
GetType()
获取当前实例的 Type。(继承自 Object)
MemberwiseClone()
创建当前 Object 的浅表副本。(继承自 Object)OnDeserialization(Object)
实现 ISerializable 接口,并在完成反序列化之后引发反序列化事件。
Remove(TKey)
从 Dictionary<TKey,TValue> 中移除所指定的键的值。
ToString()
返回表示当前对象的字符串。(继承自 Object)
TryGetValue(TKey, TValue)
获取与指定键关联的值。
简单示例
C# 中使用字典Dictionary来存储键值对的数据。创建字典时需要定义键值对的类型,再添加字典元素时需要符合定义的键值对类型。
1. 创建一个字典
例如,创建一个键值都是字符串类型的字典,里面的类型是不指定的。
Dictionary<string, string> EmployeeList = new Dictionary<string, string>();
Dictionary<int, string> EmployeeList = new Dictionary<int, string>();
Dictionary<int, double> EmployeeList = new Dictionary<string, double>();
2. 添加元素到字典
使用Add 方法添加元素
EmployeeList.Add("Mahesh Chand", "Programmer");
EmployeeList.Add("Praveen Kumar", "Project Manager");
EmployeeList.Add("Raj Kumar", "Architect");
EmployeeList.Add("Nipun Tomar", "Asst. Project Manager");
EmployeeList.Add("Dinesh Beniwal", "Manager");
类似可以创建其它类型的字典,通过Add方法添加元素。
Dictionary<string, int> AuthorList = new Dictionary<string, int>();
AuthorList.Add("Mahesh Chand", 35);
AuthorList.Add("Mike Gold", 25);
AuthorList.Add("Praveen Kumar", 29);
AuthorList.Add("Raj Beniwal", 21);
AuthorList.Add("Dinesh Beniwal", 84);
Dictionary<string, float> PriceList = new Dictionary<string, float>(3);
PriceList.Add("Tea", 3.25f);
PriceList.Add("Juice", 2.76f);
PriceList.Add("Milk", 1.15f);
123456789101112
3. 检索键值
使用KeyValuePair 检索键和值
foreach (KeyValuePair<string,string> kv in EmployeeList)
{
Console.WriteLine($"键:{kv.Key} -> 值: {kv.Value}");
}
//检索键:
foreach (var k in EmployeeList.Keys)
{
Console.WriteLine(k);
}
//检索值:
foreach (var v in EmployeeList.Values)
{
Console.WriteLine(v);
}
4. 修改字典中某个元素的值
//修改前
Console.WriteLine(EmployeeList["Mahesh Chand"]);
EmployeeList["Mahesh Chand"] = "ModfiyValue";
//修改后
Console.WriteLine(EmployeeList["Mahesh Chand"]);
字典名称[“键名”] = 要修改的值
5. 字典中常用方法
add, remove, find(ContainsKey,ContainsValue)
Add方法用于添加元素,上面已经演示过。
Remove 用于删除元素
EmployeeList.Remove(“Mahesh Chand”);
查询键是否存在,值是否存在字典中
if(EmployeeList.ContainsKey("Mahesh Chand"))
{
Console.WriteLine("包含键 Mahesh Chand");
}
if (!EmployeeList.ContainsValue("CEO"))
{
Console.WriteLine("CEO NOT found");
}
总结:
这篇文章比较简单,只是简单的学习一下,对它有更多的认识,在有需求的时候最起码有路子,虽然很简单,但是也是可以学到东西的,我们学习了新的知识,对我们的知识储备及技术又有新的一点点的进步,C#的技术就是先简单再难嘛,积少成多之后才会成长才会进步,我们要不断的学习不断的探索,才能有学习的动力,才会有学习的欲望,创作不易,点赞评论收藏关注,嘿嘿,不喜勿喷!!!!