رياضيات - تقاطع الـ 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);التحدي
متوسطأنشئ دالة باسم 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)));
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1المصفوفات متعددة الأبعاد
أساسيات المصفوفات ثنائية الأبعادتعريف وتهيئة المصفوفات ثنائية الأبعادالوصول إلى عناصر المصفوفة ثنائية الأبعادالحلقات المتداخلة مع المصفوفات ثنائية الأبعادالمصفوفات المتعرجة (Jagged Arrays)عمليات المصفوفات الشائعةمراجعة - المصفوفات متعددة الأبعاد4تقنيات التحكم في التدفق
الإرجاع المبكرشروط الحمايةجمل القفز (goto)Break و Continueتسطيح الشروط المتداخلة7المعاملات المنطقية المتقدمة
التقييم المختصرالمعاملات المنطقية الشرطيةأولوية المعاملاتمراجعة - المعاملات المتقدمة2اتخاذ القرارات المتقدم
الشروط المتعددةالمنطق البولياني المعقدمقارنة بين If و Switchجمل Switch المتداخلةمراجعة - القرارات المتقدمة5معالجة الاستثناءات
أساسيات Try-Catchأنواع الاستثناءاتكتل Catch المتعددةالتعامل مع الملفاتكتلة FinallyUsing مقابل Try-Finallyاستثناءات مخصصةمراجعة - معالجة الأخطاء8نظام تحليل البيانات
إعداد جمع البياناتمنطق إدخال البيانات11HashSet الجزء الأول
ما هو الـ HashSet؟إضافة عنصرحذف عنصرالتحقق من وجود عنصرالفراغ والحجمملخص - HashSet3تحسينات الحلقات التكرارية
أداء الحلقات التكراريةالتكرار عبر البيانات المعقدةأنواع الحلقات التكراريةإعادة هيكلة الحلقات التكراريةملخص - الحلقات المحسنة6التعامل مع الـ Null
أساسيات الـ Null Referenceأنواع القيم القابلة للـ Nullأنماط التحقق من الـ Nullالبرمجة الدفاعيةملخص - أمان الـ Null9HashMap الجزء الأول
ما هو الـ HashMap؟تعريف HashMapالتحقق من وجود المفتاحالوصول إلى القيمتعديل القواميسملخص - HashMap12HashSet الجزء الثاني
رياضيات - اتحاد الـ HashSetsرياضيات - تقاطع الـ HashSetرياضيات - الفرق بين المجموعاترياضيات - الفرق المتماثلالتكرار عبر المجموعات (Sets)