Math - Symmetric Difference
Parte da seção Lógica & Fluxo do Journey de C# da Coddy — lição 65 de 66.
A diferença simétrica de dois conjuntos contém elementos que estão em um ou outro dos conjuntos, mas não na sua interseção (elementos que aparecem em exatamente um dos conjuntos).
Crie dois objetos HashSet:
HashSet<int> set1 = new HashSet<int>() { 1, 2, 3, 4 };
HashSet<int> set2 = new HashSet<int>() { 3, 4, 5, 6 };Crie um novo HashSet para o resultado:
HashSet<int> symmetricDifference = new HashSet<int>(set1);Use o método SymmetricExceptWith para calcular a diferença simétrica:
symmetricDifference.SymmetricExceptWith(set2);Após executar o código acima, o conjunto symmetricDifference contém:
{ 1, 2, 5, 6 }Os elementos 3 e 4 estão em ambos os conjuntos, portanto, eles não aparecem na diferença simétrica.
Desafio
FácilCrie um método chamado FindSymmetricDifference que recebe dois argumentos:
- Um HashSet de inteiros (
set1) - Um HashSet de inteiros (
set2)
O método deve retornar um novo HashSet<int> contendo a diferença simétrica dos dois conjuntos. O restante do programa (leitura de entrada, ordenação e impressão dos resultados) já está fornecido para você.
Folha de consulta
A diferença simétrica de dois conjuntos contém elementos que estão em um ou outro conjunto, mas não em ambos (elementos que aparecem em exatamente um dos conjuntos).
Para encontrar a diferença simétrica, crie um novo HashSet a partir de um conjunto e use 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 } (os elementos 3 e 4 são excluídos porque aparecem em ambos os conjuntos)
Experimente você mesmo
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
public static HashSet<int> FindSymmetricDifference(HashSet<int> set1, HashSet<int> set2)
{
// Escreva seu código aqui
}
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);
// Imprima o resultado em ordem crescente
int[] orderedResult = result.OrderBy(x => x).ToArray();
foreach (int num in orderedResult)
{
Console.WriteLine(num);
}
}
}Esta lição inclui um quiz rápido. Comece a lição para respondê-lo e acompanhar seu progresso.
Todas as lições de Lógica & Fluxo
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