Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

رياضيات - تقاطع الـ HashSet

جزء من قسم Logic & Flow في رحلة C# على Coddy — الدرس 63 من 66.

تقاطع مجموعتين يحتوي فقط على العناصر الموجودة في كلتا المجموعتين.

أنشئ مجموعتي HashSet:

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

لإيجاد التقاطع، استخدم الأسلوب IntersectWith:

set1.IntersectWith(set2);

بعد تنفيذ هذا الكود، سيحتوي set1 على:

{ 3, 4, 5 }

تقوم الطريقة IntersectWith بتعديل المجموعة التي تم استدعاؤها عليها، حيث تحتفظ فقط بالعناصر الموجودة في كلتا المجموعتين.

لإنشاء مجموعة جديدة تحتوي على التقاطع دون تعديل المجموعات الأصلية، يمكنك القيام بما يلي:

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

التحدي

متوسط

أنشئ دالة باسم FindCommonElements تستقبل وسيطين:

  • مجموعة HashSet من الأعداد الصحيحة (set1)
  • مجموعة HashSet من الأعداد الصحيحة (set2)

يجب أن تعيد الدالة مجموعة HashSet جديدة تحتوي فقط على العناصر الموجودة في كلتا المجموعتين (التقاطع).

ورقة مرجعية

يحتوي تقاطع مجموعتين فقط على العناصر التي تظهر في كلتا المجموعتين.

استخدم الطريقة IntersectWith لإيجاد التقاطع:

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 الآن على { 3, 4, 5 }

تقوم الطريقة IntersectWith بتعديل المجموعة الأصلية. للحفاظ على المجموعة الأصلية، قم بإنشاء نسخة أولاً:

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

جرّب بنفسك

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) {
        // اكتب الكود الخاص بك هنا
        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 s in input1) {
                if (int.TryParse(s, out int num)) {
                    set1.Add(num);
                }
            }
        }
        
        // قراءة السطر الثاني للمجموعة الثانية
        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 s in input2) {
                if (int.TryParse(s, out int num)) {
                    set2.Add(num);
                }
            }
        }
        
        // العثور على العناصر المشتركة
        HashSet<int> common = FindCommonElements(set1, set2);
        
        // طباعة النتيجة (مرتبة)
        Console.WriteLine(string.Join(" ", common.OrderBy(x => x)));
    }
}
quiz iconاختبر نفسك

يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.

جميع دروس Logic & Flow