C# 如何将两个ArrayList合并为无重复元素的第三个列表
C# 合并两个ArrayList并去重实现方案
现有代码修正版
你原有嵌套循环的逻辑有误,直接调整为如下实现即可满足需求:
ArrayList list1 = new ArrayList(); list1.Add("A"); list1.Add("B"); list1.Add("C"); list1.Add("D"); ArrayList list2 = new ArrayList(); list2.Add("1"); list2.Add("A"); list2.Add("2"); list2.Add("3"); list2.Add("C"); list2.Add("4"); list2.Add("D"); ArrayList list3 = new ArrayList(); // 先加入list1的全部元素 foreach (var item in list1) { list3.Add(item); } // 遍历list2,仅添加不在list3中的元素 foreach (var item2 in list2) { if (!list3.Contains(item2)) { list3.Add(item2); } } // 验证输出可根据需求删除 foreach (var item in list3) { Console.WriteLine(item); } Console.ReadLine();
这个方案基于ArrayList原生的Contains方法判断重复,逻辑简单直观,适合数据量不大的场景(比如已安装软件列表通常最多几百条,完全够用)。
更高性能的实现方案
如果后续你需要处理更大数据量的列表,可以用HashSet做中转,利用HashSet的自动去重特性和O(1)的查找效率,避免多次调用Contains带来的性能损耗:
HashSet<object> tempSet = new HashSet<object>(); // 依次添加两个列表的所有元素,HashSet会自动跳过重复项 foreach (var item in list1) tempSet.Add(item); foreach (var item in list2) tempSet.Add(item); // 转成目标ArrayList ArrayList list3 = new ArrayList(tempSet);
可选优化建议
ArrayList是.NET早期的非泛型集合,存在类型不安全、需要装箱拆箱的问题。如果你的项目可以调整集合类型,更推荐用泛型集合List<string>存储软件名称,配合LINQ可以一行代码完成合并去重:
List<string> list1 = new List<string> {"A","B","C","D"}; List<string> list2 = new List<string> {"1","A","2","3","C","4","D"}; List<string> list3 = list1.Union(list2).ToList();
内容的提问来源于stack exchange,提问作者MrClayGiovanni
相关产品推荐
相关产品推荐

