C#数组并集输出显示System.Int32[]问题及交、差集实现咨询
问题分析与解决方案
一、控制台显示System.Int32[]的原因及解决
直接输出数组变量时,C#会调用数组默认的ToString()方法,返回的是数组的类型名称,所以会显示System.Int32[]。正确的打印方式有两种:
- 用
string.Join将数组元素拼接成字符串输出 - 遍历数组逐个输出元素
二、并集(A∪B)的正确实现
你当前代码只是创建了一个长度为两数组之和的空数组,完全没有实现并集逻辑。并集需要包含两个数组中所有不重复的元素,实现思路:
- 合并两个数组的元素
- 去除重复项(可借助
HashSet<int>自动去重的特性) - 将去重后的集合转换为数组
三、交集(A∩B)和差集(A-B)的实现建议
- 交集:找出同时存在于两个数组中的元素,可通过遍历其中一个数组,检查元素是否存在于另一个数组(注意去重),或使用集合的交集方法。
- 差集(A-B):找出仅在A中存在、不在B中的元素,可遍历A数组,筛选出不在B中的元素,或使用集合的差集方法。
修正后的完整代码(使用Linq简化实现)
using System; using System.Linq; // 引入Linq命名空间,方便使用集合操作方法 namespace HelloWorld { class Program { static void Main(string[] args) { // 输入数组A Console.WriteLine("size of A? "); int sizeA = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Value of A:"); int[] arrayA = new int[sizeA]; for (int i = 0; i < arrayA.Length; i++) { arrayA[i] = Convert.ToInt32(Console.ReadLine()); } // 输入数组B Console.WriteLine("size of B?"); int sizeB = Convert.ToInt32(Console.ReadLine()); Console.WriteLine("Value of B:"); int[] arrayB = new int[sizeB]; for (int i = 0; i < arrayB.Length; i++) { arrayB[i] = Convert.ToInt32(Console.ReadLine()); } // 计算并集 int[] union = arrayA.Union(arrayB).ToArray(); Console.WriteLine("并集(A∪B):"); Console.WriteLine($"{{{string.Join(", ", union)}}}"); // 计算交集 int[] intersection = arrayA.Intersect(arrayB).ToArray(); Console.WriteLine("交集(A∩B):"); Console.WriteLine($"{{{string.Join(", ", intersection)}}}"); // 计算差集(A-B) int[] difference = arrayA.Except(arrayB).ToArray(); Console.WriteLine("差集(A-B):"); Console.WriteLine($"{{{string.Join(", ", difference)}}}"); Console.ReadLine(); } } }
无Linq的手动实现方案
如果不想依赖Linq,可手动实现集合操作:
手动实现并集
static int[] Union(int[] a, int[] b) { HashSet<int> uniqueSet = new HashSet<int>(); foreach (int num in a) uniqueSet.Add(num); foreach (int num in b) uniqueSet.Add(num); return uniqueSet.ToArray(); }
手动实现交集
static int[] Intersection(int[] a, int[] b) { HashSet<int> setB = new HashSet<int>(b); HashSet<int> resultSet = new HashSet<int>(); foreach (int num in a) { if (setB.Contains(num)) resultSet.Add(num); } return resultSet.ToArray(); }
手动实现差集(A-B)
static int[] Difference(int[] a, int[] b) { HashSet<int> setB = new HashSet<int>(b); HashSet<int> resultSet = new HashSet<int>(); foreach (int num in a) { if (!setB.Contains(num)) resultSet.Add(num); } return resultSet.ToArray(); }
内容的提问来源于stack exchange,提问作者daniell e
相关产品推荐
相关产品推荐

