正确使用集合

集合总体上分为线性集合和非线性集合。线性集合具有直接前驱和直接后驱;而非线性集合可能有多个后驱或者前驱。

线性集合按存储方式又分为:直接存储和顺序存储。

             直接存储:该类型的集合数据元素可以直接通过下标来访问(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);
            }
        }
    }
复制代码

 

posted @   Wen_Chen  阅读(58)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效
点击右上角即可分享
微信分享提示