Menu
Coddy logo textTech

Math - Intersection of 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);
challenge icon

Aufgabe

Mittel

Erstellen Sie eine Methode namens FindCommonElements, die zwei Argumente annimmt:

  • Ein HashSet von Ganzzahlen (set1)
  • Ein HashSet von Ganzzahlen (set2)

Die Methode sollte ein neues HashSet zurückgeben, das nur die Elemente enthält, die in beiden Mengen vorkommen (die Schnittmenge).

Spickzettel

Die Schnittmenge zweier Mengen enthält nur Elemente, die in beiden Mengen vorkommen.

Verwenden Sie die IntersectWith-Methode, um die Schnittmenge zu finden:

HashSet<int> set1 = new HashSet<int>() { 1, 2, 3, 4, 5 };
HashSet<int> set2 = new HashSet<int>() { 3, 4, 5, 6, 7 };
set1.IntersectWith(set2); // set1 enthält jetzt { 3, 4, 5 }

Die IntersectWith-Methode modifiziert die ursprüngliche Menge. Um die ursprüngliche Menge zu erhalten, erstellen Sie zuerst eine Kopie:

HashSet<int> intersection = new HashSet<int>(set1);
intersection.IntersectWith(set2);

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)));
    }
}
quiz iconTeste dich selbst

Diese Lektion enthält ein kurzes Quiz. Starte die Lektion, um es zu beantworten und deinen Fortschritt zu speichern.

Alle Lektionen in Logik & Ablauf