时间:2021-05-20
以键值对Dictionary<[key], [value]>形式存值,和哈希表很像也是一种无序的结构。
要使用Dictionary,需要先导入C#泛型命名空间System.Collections.Generic
1.任何键都必须是唯一的 ——> 不能添加相同key的键值对,不然就报错:
如果要修改已有key对应的value,可以这样做:
2.Unity5.4以下的版本,最好不要用foreach来遍历字典:
法一:foreach遍历字典,会生成GC:
法二:对于我这种需求,使用for循环,会生成更多的GC,因为存在mActMergeRedPointKey这个局部List变量
法三:使用迭代器,不会生成GC:
3.根据key取value,最好使用 TryGetValue 而不是 ContainsKey+根据key索引value:
法一:ContainsKey+根据key索引value,不好,用了两次查找,第一次:ContainsKey,第二次:myDictionary[key]
if(myDictionary.ContainsKey(key)){ // 通过key索引value int resValue = myDictionary[key];}法二:TryGetValue的方法:
int resValue ;myDictionary.TryGetValue(key, out resValue);使用TryGetValue更快,性能更好,因为只用了一次查找,TryGetValue 比 ContainsKey后使用[key]取value,速度快一倍;
TryGetValue更安全,找不到value时返回false;而使用ContainsKey后使用[key]取value取不到时,会抛出异常导致真机卡死。
一般用法:key和value都为基本类型,举例:key为int类型,value为string类型
// 声明和初始化Dictionary<int,string> myDictionary = new Dictionary<int,string>();// 添加元素myDictionary.Add(key,value);// 判断是否包含键if(myDictionary.ContainsKey(key))// 总个数myDictionary.Count// 遍历foreach(string key in myDictionary.Keys) // myDictionary.Keys:所有键的集合{ int resValue = myDictionary[key];}//调用成员Keys,会产生额外GC:Dictionary本身储存数据是成对储存的,也就是KeyValuePair,所以//要单独拿出Keys时会新建一个数组,这也使得GC增加,推荐大家如果不需要单独存储Keys,尽量避免调用。// 移除指定键和值myDictionary.Remove(key);补充:c#中字典类(Dictionary)介绍
说明:
1、必须包含命名空间System.Collection.Generic
2、Dictionary里面每一个元素都是以键值对的形式存在的
3、键必须是唯一的,而值不需要唯一的
4、键和值都可以以任何数据类型存在(比如:值类型、引用类型、自定义类型等等)
5、通过一个键读取一个值得时间接近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"); openWith["png"] = "picture.exe"//取值Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]);//更改值openWith["rtf"] = "winword.exe";Console.WriteLine("For key = \"rtf\", value = {0}.", openWith["rtf"]); //遍历keyforeach (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://parer<T>。 Count 获取包含在 Dictionary<TKey, TValue> 中的键/值对的数目 Item 获取或设置与指定的键相关联的值。 Keys 获取包含 Dictionary<TKey, TValue> 中的键的集合。 Values 获取包含 Dictionary<TKey, TValue> 中的值的集合。以上为个人经验,希望能给大家一个参考,也希望大家多多支持。如有错误或未考虑完全的地方,望不吝赐教。
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
本文实例讲述了JS字典Dictionary类定义与用法。分享给大家供大家参考,具体如下:字典Dictionary类functi
本文展示了一个C#的Socket操作类的完整实例,并附带了用法说明,分享给大家供大家参考之用。具体方法如下:主要功能代码如下:usingSystem;using
本文实例讲述了python中字典(Dictionary)用法。分享给大家供大家参考。具体分析如下:字典(Dictionary)是一种映射结构的数据类型,由无序的
在C#中,使用Dictionary类来管理由键值对组成的集合,这类集合称为字典。字典最大的特点就是能够根据键来快速查找集合中的值。下面是一个使用字典的小实例,希
mysqldump常用于MySQL数据库逻辑备份。1、各种用法说明A.最简单的用法:mysqldump-uroot-pPassword[databasename