Mathematik – Schnittmenge von HashSet
Teil des Abschnitts Logik & Ablauf der C#-Journey von Coddy. Lektion 63 von 66.
Die Schnittmenge zweier Mengen enthält nur die Elemente, die in beiden Mengen vorkommen.
Erstellen Sie zwei HashSets:
HashSet<int> set1 = new HashSet<int>() { 1, 2, 3, 4, 5 };
HashSet<int> set2 = new HashSet<int>() { 3, 4, 5, 6, 7 };Um die Schnittmenge zu finden, verwenden Sie die IntersectWith-Methode:
set1.IntersectWith(set2);Nach der Ausführung dieses Codes wird set1 enthalten:
{ 3, 4, 5 }Die IntersectWith-Methode modifiziert die Menge, auf der sie aufgerufen wird, und behält nur Elemente bei, die in beiden Mengen existieren.
Um eine neue Menge mit der Schnittmenge zu erstellen, ohne die ursprünglichen Mengen zu modifizieren, können Sie:
HashSet<int> intersection = new HashSet<int>(set1);
intersection.IntersectWith(set2);Aufgabe
MittelErstelle eine Methode namens FindCommonElements, die zwei Argumente entgegennimmt:
- Ein HashSet von Ganzzahlen (set1)
- Ein HashSet von Ganzzahlen (set2)
Die Methode soll ein neues HashSet zurückgeben, das nur die Elemente enthält, die in beiden Mengen vorkommen (die Schnittmenge).
Probier es selbst
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
class Program {
public static HashSet<int> FindCommonElements(HashSet<int> set1, HashSet<int> set2) {
// Schreibe deinen Code hier
return null;
}
static void Main(string[] args) {
// Lese erste Zeile für erste Menge
string line1 = Console.ReadLine();
HashSet<int> set1 = new HashSet<int>();
// Überprüfe, ob erste Menge im JSON-Array-Format ist
if (line1 != null && line1.StartsWith("[") && line1.EndsWith("]")) {
try {
// Extrahiere Inhalt zwischen eckigen Klammern
string arrayContent = line1.Substring(1, line1.Length - 2);
// Versuche, den JSON-Array-Inhalt zu parsen
string[] values = Regex.Split(arrayContent, @",\s*");
foreach (string value in values) {
// Entferne Anführungszeichen falls vorhanden
string cleanValue = value.Trim();
if (cleanValue.StartsWith("\"") && cleanValue.EndsWith("\"")) {
cleanValue = cleanValue.Substring(1, cleanValue.Length - 2);
}
// Parse als Ganzzahl und füge zur Menge hinzu
if (int.TryParse(cleanValue, out int num)) {
set1.Add(num);
}
}
}
catch (Exception ex) {
Console.WriteLine($"Error parsing first set: {ex.Message}");
return;
}
}
else {
// Verarbeite traditionelle leerzeichengetrennte Eingabe für erste Menge
string[] input1 = line1.Split();
foreach (string s in input1) {
if (int.TryParse(s, out int num)) {
set1.Add(num);
}
}
}
// Lese zweite Zeile für zweite Menge
string line2 = Console.ReadLine();
HashSet<int> set2 = new HashSet<int>();
// Überprüfe, ob zweite Menge im JSON-Array-Format ist
if (line2 != null && line2.StartsWith("[") && line2.EndsWith("]")) {
try {
// Extrahiere Inhalt zwischen eckigen Klammern
string arrayContent = line2.Substring(1, line2.Length - 2);
// Versuche, den JSON-Array-Inhalt zu parsen
string[] values = Regex.Split(arrayContent, @",\s*");
foreach (string value in values) {
// Entferne Anführungszeichen falls vorhanden
string cleanValue = value.Trim();
if (cleanValue.StartsWith("\"") && cleanValue.EndsWith("\"")) {
cleanValue = cleanValue.Substring(1, cleanValue.Length - 2);
}
// Parse als Ganzzahl und füge zur Menge hinzu
if (int.TryParse(cleanValue, out int num)) {
set2.Add(num);
}
}
}
catch (Exception ex) {
Console.WriteLine($"Error parsing second set: {ex.Message}");
return;
}
}
else {
// Verarbeite traditionelle leerzeichengetrennte Eingabe für zweite Menge
string[] input2 = line2.Split();
foreach (string s in input2) {
if (int.TryParse(s, out int num)) {
set2.Add(num);
}
}
}
// Finde gemeinsame Elemente
HashSet<int> common = FindCommonElements(set1, set2);
// Drucke Ergebnis (sortiert)
Console.WriteLine(string.Join(" ", common.OrderBy(x => x)));
}
}Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.
Alle Lektionen in Logik & Ablauf
1Mehrdimensionale Arrays
Grundlagen 2D-Arrays2D-Arrays deklarieren und initialisierenAuf Elemente von 2D-Arrays zugreifenVerschachtelte Schleifen mit 2D-ArraysGezackte ArraysHäufige MatrixoperationenZusammenfassung – Mehrdimensionale Arrays4Techniken zur Ablaufsteuerung
Frühe RückgabenWächterklauselnSprunganweisungen (goto)Break und ContinueVerschachtelte Bedingungen abflachen7Logische Operatoren – Fortgeschritten
KurzschlussauswertungBedingte logische OperatorenOperatorrangfolgeRückblick – Erweiterte Operatoren2Fortgeschrittene Entscheidungslogik
Mehrere BedingungenKomplexe boolesche LogikVergleich: If vs. SwitchVerschachtelte Switch-AnweisungenRückblick – Fortgeschrittene Entscheidungen5Fehlerbehandlung mit Exceptions
Grundlagen von Try-CatchException-TypenMehrere Catch-BlöckeArbeiten mit DateienFinally-BlockUsing im Vergleich zu Try-FinallyBenutzerdefinierte ExceptionsZusammenfassung – Fehlerbehandlung3Schleifenverbesserungen
SchleifenleistungKomplexe IterationJeder SchleifentypSchleifen refaktorierenRückblick – Optimierte Schleifen6Behandlung von Nullwerten
Grundlagen von NullreferenzenNullable WerttypenMuster zur NullprüfungDefensive ProgrammierungZusammenfassung – Nullsicherheit9HashMap Teil 1
Was ist eine HashMap?Eine HashMap deklarierenPrüfen, ob ein Schlüssel vorhanden istAuf Werte zugreifenDictionaries ändernZusammenfassung – HashMap12HashSet Teil 2
Mathematik – Vereinigung von HashSetsMathematik – Schnittmenge von HashSetMathematik – MengendifferenzMathematik – Symmetrische DifferenzIteration über MengenÜbe selbstständig: Online-C#-Compiler