正确使用集合
集合总体上分为线性集合和非线性集合。线性集合具有直接前驱和直接后驱;而非线性集合可能有多个后驱或者前驱。
线性集合按存储方式又分为:直接存储和顺序存储。
直接存储:该类型的集合数据元素可以直接通过下标来访问(Array,string,struct);优点:向数据结构中添加元素很高效,直接放在数据末尾的第一个空位即可;缺点就是:向集合中插入元素会变的低效,需要给插入的元素腾出位置并顺序后移。
如果集合的数目固定并且不涉及转型,使用数组效率高,否则就使用List<T>.
顺序存储:即线性表。线性表可动态扩大和缩小,他在一片连续的区域中存储数据元素。线性表不能按照索引进行查找,它是通过对地址的引用来搜索元素的,为了找到元素,必须遍历所有元素,直到找到对应的元素为止。所以线性表的优点是插入和删除数据效率高,缺点是查找效率相对低。
KeyValuePair:定义可设置或检索的键/值对.
public KeyValuePair(TKey key, TValue value);键类型,值类型
字典:ConcurrentDictionary
在插入数据的时候,可以不先赋值,先插个键值对进去,后面再改键的值。
class Program { public static ConcurrentDictionary<string, byte[]> _plcDataDic = new ConcurrentDictionary<string, byte[]>(); static void Main(string[] args) { Console.WriteLine("Hello World!"); byte[] arr01 = null; byte[] arr02 = { 0, 1, 2, 3, 4, 5 }; byte[] arr03 = new byte[arr02.Length]; //Console.WriteLine("arr01.GetHashCode: " + arr01.GetHashCode()); Console.WriteLine("arr02.GetHashCode: " + arr02.GetHashCode()); Console.WriteLine("arr03.GetHashCode: " + arr03.GetHashCode()); Console.WriteLine(); arr01 = arr03; // 将arr03赋给arr01,如果不赋给arr01,也可以添加,但是获取的时候值会是“无实例的”。 _plcDataDic.AddOrUpdate("arr01", arr01, (k, v) => arr01); //在这里先将空的arr01 byte数组传进去 byte[] value; _plcDataDic.TryGetValue("arr01", out value); foreach (var a in value) { Console.Write(a); //输出全为0 } Console.WriteLine(); Console.WriteLine("arr01.GetHashCode: " + arr01.GetHashCode()); Console.WriteLine("arr03.GetHashCode: " + arr03.GetHashCode()); Console.WriteLine(); //_plcDataDic.AddOrUpdate("arr01", arr01, (k, v) => arr01); //arr03 = arr02; Array.Copy(arr02, 0, arr03, 0, arr03.Length); // 拷贝arr02的值给arr03,其实也改变了arr01,因为arr01与arr03共享一片内存地址 Console.WriteLine("arr01.GetHashCode: " + arr01.GetHashCode()); Console.WriteLine("arr02.GetHashCode: " + arr02.GetHashCode()); Console.WriteLine("arr03.GetHashCode: " + arr03.GetHashCode()); Console.WriteLine(); foreach (var a in arr01) { Console.Write(a); } Console.WriteLine(); foreach (var a in arr02) { Console.Write(a); } Console.WriteLine(); foreach (var a in arr03) { Console.Write(a); } Console.WriteLine(); _plcDataDic.TryGetValue("arr01", out value); // 这里重新获取字典中的arr01的值 foreach (var a in value) // 结果输出0,1,2,3,4,5;添加值成功。 { Console.Write(a); } } }
浙公网安备 33010602011771号