正确使用集合
集合总体上分为线性集合和非线性集合。线性集合具有直接前驱和直接后驱;而非线性集合可能有多个后驱或者前驱。
线性集合按存储方式又分为:直接存储和顺序存储。
直接存储:该类型的集合数据元素可以直接通过下标来访问(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); } } }
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 单线程的Redis速度为什么快?
· 展开说说关于C#中ORM框架的用法!
· Pantheons:用 TypeScript 打造主流大模型对话的一站式集成库
· SQL Server 2025 AI相关能力初探
· 为什么 退出登录 或 修改密码 无法使 token 失效