رياضيات - اتحاد الـ HashSets
جزء من قسم Logic & Flow في رحلة C# على Coddy — الدرس 62 من 66.
تجمع عملية الاتحاد (Union) بين مجموعتين لإنشاء مجموعة جديدة تحتوي على جميع العناصر من كلتا المجموعتين، دون تكرار.
أنشئ مجموعتي 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 لا يسمح بالتكرار.
التحدي
سهلقم بإنشاء دالة باسم UnionSets تأخذ اثنين من HashSets من الأعداد الصحيحة كمعاملات (parameters) وتُرجع HashSet جديدًا يحتوي على اتحاد المجموعتين.
تمت معالجة قراءة المدخلات وطباعة المخرجات بالفعل من أجلك — ركز على تنفيذ جسم الدالة UnionSets.
ورقة مرجعية
عملية الاتحاد (Union) تجمع بين مجموعتين لإنشاء مجموعة جديدة تحتوي على جميع العناصر من كلتا المجموعتين، دون تكرار.
قم بإنشاء اثنين من HashSets:
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);تحتوي النتيجة على جميع العناصر الفريدة من كلتا المجموعتين. يتم إزالة التكرارات تلقائياً.
جرّب بنفسك
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)));
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس 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)