C#数组对称合并:如何合并两数组并去除共同元素得到目标数组
合并两个C#数组并提取非共同元素
现有两个C#字符串数组:
string[] arr1 = new string[2]{"Hello", "Stack"}; string[] arr2 = new string[2]{"Stack", "Overflow"};
需要合并后得到仅包含两数组中非共同元素的新数组:string[2]{"Hello", "Overflow"},可以用以下几种方法实现:
方法一:使用LINQ(简洁高效)
利用LINQ的集合操作方法,直接计算两个数组的对称差集(即只在其中一个数组中出现的元素):
using System.Linq; // 计算对称差集 string[] result = arr1.Union(arr2).Except(arr1.Intersect(arr2)).ToArray();
Union(arr2):合并两个数组并去重,得到{"Hello", "Stack", "Overflow"}Intersect(arr2):获取两个数组的共同元素,得到{"Stack"}Except(...):从合并后的集合中移除共同元素,最终得到目标数组
方法二:手动遍历+哈希集合(无需LINQ)
如果不想依赖LINQ,可以用哈希集合统计元素出现次数,再筛选出只出现一次的元素:
using System.Collections.Generic; Dictionary<string, int> countDict = new Dictionary<string, int>(); // 统计arr1中元素的出现次数 foreach (string s in arr1) { if (countDict.ContainsKey(s)) countDict[s]++; else countDict[s] = 1; } // 统计arr2中元素的出现次数 foreach (string s in arr2) { if (countDict.ContainsKey(s)) countDict[s]++; else countDict[s] = 1; } // 筛选出只出现一次的元素 List<string> resultList = new List<string>(); foreach (var kvp in countDict) { if (kvp.Value == 1) resultList.Add(kvp.Key); } string[] result = resultList.ToArray();
这种方法通过统计每个元素在两个数组中的总出现次数,只保留出现次数为1的元素,同样能得到目标结果。
内容的提问来源于stack exchange,提问作者ser
相关产品推荐
相关产品推荐

