Matematyka — różnica symetryczna
Część sekcji Logika i sterowanie przepływem ścieżki C# w Coddy. Lekcja 65 z 66.
Różnica symetryczna dwóch zbiorów zawiera elementy, które należą do któregokolwiek z tych zbiorów, ale nie do ich części wspólnej (elementy występujące dokładnie w jednym z tych zbiorów).
Utwórz dwa obiekty HashSet:
HashSet<int> set1 = new HashSet<int>() { 1, 2, 3, 4 };
HashSet<int> set2 = new HashSet<int>() { 3, 4, 5, 6 };Utwórz nowy HashSet dla wyniku:
HashSet<int> symmetricDifference = new HashSet<int>(set1);Użyj metody SymmetricExceptWith, aby obliczyć różnicę symetryczną:
symmetricDifference.SymmetricExceptWith(set2);Po wykonaniu powyższego kodu zbiór symmetricDifference zawiera:
{ 1, 2, 5, 6 }Elementy 3 i 4 należą do obu zbiorów, więc nie pojawiają się w różnicy symetrycznej.
Wyzwanie
ŁatwyUtwórz metodę o nazwie FindSymmetricDifference, która przyjmuje dwa argumenty:
- HashSet liczb całkowitych (
set1) - HashSet liczb całkowitych (
set2)
Metoda powinna zwrócić nowy HashSet<int> zawierający różnicę symetryczną tych dwóch zbiorów. Pozostała część programu (odczytywanie danych wejściowych, sortowanie i wypisywanie wyników) jest już dla Ciebie przygotowana.
Spróbuj swoich sił
using System;
using System.Collections.Generic;
using System.Linq;
class Program
{
public static HashSet<int> FindSymmetricDifference(HashSet<int> set1, HashSet<int> set2)
{
// Wpisz tutaj swój kod
}
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);
// Wypisz wynik w kolejności rosnącej
int[] orderedResult = result.OrderBy(x => x).ToArray();
foreach (int num in orderedResult)
{
Console.WriteLine(num);
}
}
}Ta lekcja zawiera krótki quiz. Zacznij lekcję, żeby na niego odpowiedzieć i śledzić swoje postępy.
Wszystkie lekcje w sekcji Logika i sterowanie przepływem
1Tablice wielowymiarowe
Podstawy tablic 2DDeklarowanie i inicjalizacja tablic 2DDostęp do elementów tablic 2DZagnieżdżone pętle z tablicami 2DTablice postrzępionePodstawowe operacje na macierzachPodsumowanie — tablice wielowymiarowe4Techniki sterowania przepływem
Wczesne zwrotyKlauzule ochronneInstrukcje skoku (goto)Break i continueSpłaszczanie zagnieżdżonych warunków7Zaawansowane operatory logiczne
Ewaluacja z krótkim spięciemWarunkowe operatory logicznePriorytet operatorówPowtórzenie — zaawansowane operatory2Zaawansowane podejmowanie decyzji
Wiele warunkówZłożona logika Boole’aPorównanie if i switchZagnieżdżone instrukcje switchPodsumowanie — zaawansowane decyzje5Obsługa wyjątków
Podstawy try-catchTypy wyjątkówWiele bloków catchPraca z plikamiBlok finallyusing a try-finallyWłasne wyjątkiPowtórzenie — obsługa błędów3Udoskonalenia pętli
Wydajność pętliIterowanie po złożonych strukturachKażdy typ pętliRefaktoryzacja pętliPodsumowanie — zoptymalizowane pętle6Obsługa wartości null
Podstawy referencji nullTypy wartości dopuszczające nullWzorce sprawdzania nullProgramowanie defensywnePodsumowanie — bezpieczeństwo null9HashMap część 1
Czym jest HashMap?Deklarowanie HashMapSprawdzanie, czy klucz istniejeDostęp do wartościModyfikowanie słownikówPodsumowanie — HashMap12HashSet część 2
Matematyka — suma zbiorów HashSetMatematyka — część wspólna zbiorów HashSetMatematyka — różnica zbiorówMatematyka — różnica symetrycznaIterowanie po zbiorachPoćwicz samodzielnie: Kompilator C# online