Math - Symmetric Difference
Parte de la sección Lógica y Flujo del Journey de C# de Coddy — lección 65 de 66.
La diferencia simétrica de dos conjuntos contiene elementos que están en uno u otro de los conjuntos, pero no en su intersección (elementos que aparecen en exactamente uno de los conjuntos).
Crea dos objetos HashSet:
HashSet<int> set1 = new HashSet<int>() { 1, 2, 3, 4 };
HashSet<int> set2 = new HashSet<int>() { 3, 4, 5, 6 };Crea un nuevo HashSet para el resultado:
HashSet<int> symmetricDifference = new HashSet<int>(set1);Utiliza el método SymmetricExceptWith para calcular la diferencia simétrica:
symmetricDifference.SymmetricExceptWith(set2);Después de ejecutar el código anterior, el conjunto symmetricDifference contiene:
{ 1, 2, 5, 6 }Los elementos 3 y 4 están en ambos conjuntos, por lo que no aparecen en la diferencia simétrica.
Desafío
FácilCrea un método llamado FindSymmetricDifference que toma dos argumentos:
- Un HashSet de enteros (
set1) - Un HashSet de enteros (
set2)
El método debe devolver un nuevo HashSet<int> que contenga la diferencia simétrica de los dos conjuntos. El resto del programa (lectura de entrada, ordenación e impresión de resultados) ya está proporcionado para ti.
Hoja de referencia
La diferencia simétrica de dos conjuntos contiene elementos que están en uno u otro conjunto, pero no en ambos (elementos que aparecen en exactamente uno de los conjuntos).
Para encontrar la diferencia simétrica, crea un nuevo HashSet a partir de un conjunto y usa SymmetricExceptWith():
HashSet<int> set1 = new HashSet<int>() { 1, 2, 3, 4 };
HashSet<int> set2 = new HashSet<int>() { 3, 4, 5, 6 };
HashSet<int> symmetricDifference = new HashSet<int>(set1);
symmetricDifference.SymmetricExceptWith(set2);Resultado: { 1, 2, 5, 6 } (los elementos 3 y 4 se excluyen porque aparecen en ambos conjuntos)
Pruébalo tú mismo
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
public static HashSet<int> FindSymmetricDifference(HashSet<int> set1, HashSet<int> set2)
{
// Escribe tu código aquí
}
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);
// Imprime el resultado en orden ascendente
int[] orderedResult = result.OrderBy(x => x).ToArray();
foreach (int num in orderedResult)
{
Console.WriteLine(num);
}
}
}Esta lección incluye un breve cuestionario. Empieza la lección para responderlo y registrar tu progreso.
Todas las lecciones de Lógica y Flujo
1Multi-dimensional Arrays
2D Arrays BasicsDeclaring and Initializing 2DAccessing 2D Array ElementsNested Loops with 2D ArraysJagged ArraysCommon Matrix OperationsRecap - Multi-dimensional4Flow Control Techniques
Early ReturnsGuard ClausesJump Statements (goto)Break and ContinueFlatten Nested Conditionals7Logical Operators Advanced
Short-Circuit EvaluationConditional Logical OperatorsOperator PrecedenceRecap - Advanced Operators2Advanced Decision Making
Multiple ConditionsComplex Boolean LogicIf vs. Switch ComparisonNested Switch StatementsRecap - Advanced Decisions5Exception Handling
Try-Catch BasicsException TypesMultiple Catch BlocksWorking with FilesFinally BlockUsing vs. Try-FinallyCustom ExceptionsRecap - Error Handling3Loop Enhancements
Loop PerformanceIterating ComplexEach Loop TypeRefactoring LoopsRecap - Optimized Loops6Null Handling
Null Reference BasicsNullable Value TypesNull Checking PatternsDefensive ProgrammingRecap - Null Safety9HashMap Part 1
What is a HashMap?Declare a HashMapCheck If Key ExistsAccessing ValuesModifying DictionariesRecap - HashMap12HashSet Part 2
Math - Union of HashSetsMath - Intersection of HashSetMath - Set DifferenceMath - Symmetric DifferenceIterating Over Sets