Menu
CoddyTech

数学:对称差

本课属于 Coddy C# 学习旅程的“逻辑与流程”单元。第 65 课,共 66 课。

两个集合的对称差包含属于其中任意一个集合、但不属于它们交集的元素(也就是只出现在其中一个集合中的元素)。

创建两个 HashSet 对象:

HashSet<int> set1 = new HashSet<int>() { 1, 2, 3, 4 };
HashSet<int> set2 = new HashSet<int>() { 3, 4, 5, 6 };

为结果创建一个新的 HashSet:

HashSet<int> symmetricDifference = new HashSet<int>(set1);

使用 SymmetricExceptWith 方法来计算对称差:

symmetricDifference.SymmetricExceptWith(set2);

运行上述代码后,symmetricDifference 集合包含:

{ 1, 2, 5, 6 }

元素 3 和 4 都在两个集合中,因此它们不会出现在对称差中。

challenge icon

挑战

简单

创建一个名为 FindSymmetricDifference 的方法,它接受两个参数:

  • 一个整数 HashSet(set1)
  • 一个整数 HashSet(set2)

该方法应返回一个新的 HashSet<int>,其中包含这两个集合的对称差。程序的其余部分(读取输入、排序和输出结果)已经为你提供。

亲手试试

using System;
using System.Collections.Generic;
using System.Linq;

class Program
{
    public static HashSet<int> FindSymmetricDifference(HashSet<int> set1, HashSet<int> set2)
    {
        // 在这里编写你的代码
    }
    
    static void Main(string[] args)
    {
        string[] input1 = Console.ReadLine().Split(',');
        string[] input2 = Console.ReadLine().Split(',');
        
        HashSet<int> set1 = new HashSet<int>();
        HashSet<int> set2 = new HashSet<int>();
        
        foreach (string s in input1)
        {
            if (int.TryParse(s.Trim(), out int num))
            {
                set1.Add(num);
            }
        }
        
        foreach (string s in input2)
        {
            if (int.TryParse(s.Trim(), out int num))
            {
                set2.Add(num);
            }
        }
        
        HashSet<int> result = FindSymmetricDifference(set1, set2);
        
        // 按升序输出结果
        int[] orderedResult = result.OrderBy(x => x).ToArray();
        foreach (int num in orderedResult)
        {
            Console.WriteLine(num);
        }
    }
}
quiz icon自我测试

这节课包含一个小测验。开始学习即可作答,并记录你的进度。

逻辑与流程中的所有课

自己练习: C# 在线编译器