前言
以键值对Dictionary<[key], [value]>形式存值,和哈希表很像也是一种无序的结构。
要使用Dictionary,需要先导入C#泛型命名空间System.Collections.Generic
Dictionary需要注意的特性
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]
法二:TryGetValue的方法:
使用TryGetValue更快,性能更好,因为只用了一次查找,TryGetValue 比 ContainsKey后使用[key]取value,速度快一倍;
TryGetValue更安全,找不到value时返回false;而使用ContainsKey后使用[key]取value取不到时,会抛出异常导致真机卡死。
用法
一般用法:key和value都为基本类型,举例:key为int类型,value为string类型
实例应用
补充:c#中字典类(Dictionary)介绍
关键字:Dictionary
说明:
1、必须包含命名空间System.Collection.Generic
2、Dictionary里面每一个元素都是以键值对的形式存在的
3、键必须是唯一的,而值不需要唯一的
4、键和值都可以以任何数据类型存在(比如:值类型、引用类型、自定义类型等等)
5、通过一个键读取一个值得时间接近O(1)
字典的使用方法:
定义:
参数为其他类型
参数为自定义类型
常用属性
名称
说明
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> 是否包含特定值
GetEnumerator
返回循环访问 Dictionary<TKey, TValue> 的枚举器
GetObjectData
实现 System.Runtime.Serialization.ISerializable 接口,并返回序列化 Dictionary<TKey, TValue> 实例所需的数据
GetType
获取当前实例的 Type。 (继承自 Object。)
MemberwiseClone
创建当前 Object 的浅表副本。 (继承自 Object。)
OnDeserialization
实现 System.Runtime.Serialization.ISerializable 接口,并在完成反序列化之后引发反序列化事件。
Remove
从 Dictionary<TKey, TValue> 中移除所指定的键的值 TryGetValue 获取与指定的键相关联的值。
Equals(Object)
确定指定的 Object 是否等于当前的 Object。 (继承自 Object。
Finalize
允许对象在“垃圾回收”回收之前尝试释放资源并执行其他清理操作。(继承自 Object。)
GetHashCode
用作特定类型的哈希函数。 (继承自 Object。)
以上为个人经验,希望能给大家一个参考,也希望大家多多支持脚本之家。如有错误或未考虑完全的地方,望不吝赐教。