Menu
Coddy logo textTech

מתמטיקה - איחוד של HashSets

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-C# של Coddy. שיעור 62 מתוך 66.

פעולת האיחוד משלבת שתי קבוצות ויוצרת קבוצה חדשה שמכילה את כל האיברים משתי הקבוצות, ללא כפילויות.

צור שתי קבוצות HashSet:

HashSet<int> set1 = new HashSet<int>() { 1, 2, 3 };
HashSet<int> set2 = new HashSet<int>() { 3, 4, 5 };

השתמשו בשיטת Union כדי לאחד את הקבוצות:

HashSet<int> unionSet = new HashSet<int>(set1);
unionSet.UnionWith(set2);

לאחר ביצוע הקוד שלמעלה, unionSet מכיל:

[1, 2, 3, 4, 5]

שימו לב שהאיבר 3 מופיע בתוצאה פעם אחת בלבד, מכיוון ש-HashSet אינו מאפשר כפילויות.

challenge icon

אתגר

קל

צרו מתודה בשם UnionSets שמקבלת שני HashSets של מספרים שלמים כפרמטרים ומחזירה HashSet חדש שמכיל את האיחוד של שתי הקבוצות.

קריאת הקלט והדפסת הפלט כבר מטופלות עבורכם: התמקדו במימוש גוף המתודה UnionSets.

נסו בעצמכם

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;

class Program
{
    public static HashSet<int> UnionSets(HashSet<int> set1, HashSet<int> set2)
    {
        // כתבו את הקוד שלכם כאן
        return null;
    }
    
    static void Main(string[] args)
    {
        // קראו את השורה הראשונה כדי לבדוק את הפורמט של הקבוצה הראשונה
        string line1 = Console.ReadLine();
        HashSet<int> set1 = new HashSet<int>();
        
        // בדקו אם הקבוצה הראשונה היא בפורמט של מערך JSON
        if (line1 != null && line1.StartsWith("[") && line1.EndsWith("]"))
        {
            try
            {
                // חלצו את התוכן שבין הסוגריים המרובעים
                string arrayContent = line1.Substring(1, line1.Length - 2);
                
                // נסו לפענח את התוכן של מערך JSON
                string[] values = Regex.Split(arrayContent, @",\s*");
                foreach (string value in values)
                {
                    // הסירו מירכאות, אם ישנן
                    string cleanValue = value.Trim();
                    if (cleanValue.StartsWith("\"") && cleanValue.EndsWith("\""))
                    {
                        cleanValue = cleanValue.Substring(1, cleanValue.Length - 2);
                    }
                    
                    // המירו למספר שלם והוסיפו לקבוצה
                    if (int.TryParse(cleanValue, out int num))
                    {
                        set1.Add(num);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error parsing first set: {ex.Message}");
                return;
            }
        }
        else
        {
            // עבדו את הקלט המסורתי המופרד ברווחים עבור הקבוצה הראשונה
            string[] input1 = line1.Split(' ');
            foreach (string num in input1)
            {
                if (int.TryParse(num, out int parsedNum))
                {
                    set1.Add(parsedNum);
                }
            }
        }
        
        // קראו את השורה השנייה כדי לבדוק את הפורמט של הקבוצה השנייה
        string line2 = Console.ReadLine();
        HashSet<int> set2 = new HashSet<int>();
        
        // בדקו אם הקבוצה השנייה היא בפורמט של מערך JSON
        if (line2 != null && line2.StartsWith("[") && line2.EndsWith("]"))
        {
            try
            {
                // חלצו את התוכן שבין הסוגריים המרובעים
                string arrayContent = line2.Substring(1, line2.Length - 2);
                
                // נסו לפענח את התוכן של מערך JSON
                string[] values = Regex.Split(arrayContent, @",\s*");
                foreach (string value in values)
                {
                    // הסירו מירכאות, אם ישנן
                    string cleanValue = value.Trim();
                    if (cleanValue.StartsWith("\"") && cleanValue.EndsWith("\""))
                    {
                        cleanValue = cleanValue.Substring(1, cleanValue.Length - 2);
                    }
                    
                    // המירו למספר שלם והוסיפו לקבוצה
                    if (int.TryParse(cleanValue, out int num))
                    {
                        set2.Add(num);
                    }
                }
            }
            catch (Exception ex)
            {
                Console.WriteLine($"Error parsing second set: {ex.Message}");
                return;
            }
        }
        else
        {
            // עבדו את הקלט המסורתי המופרד ברווחים עבור הקבוצה השנייה
            string[] input2 = line2.Split(' ');
            foreach (string num in input2)
            {
                if (int.TryParse(num, out int parsedNum))
                {
                    set2.Add(parsedNum);
                }
            }
        }
        
        // חשבו את האיחוד והדפיסו את התוצאה
        HashSet<int> unionSet = UnionSets(set1, set2);
        Console.WriteLine(string.Join(" ", unionSet.OrderBy(x => x)));
    }
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת תוכנית

תרגלו בעצמכם: קומפיילר C# אונליין