رياضيات - الفرق بين المجموعات
جزء من قسم Logic & Flow في رحلة C# على Coddy — الدرس 64 من 66.
تنشئ عملية فرق المجموعات (Set Difference) مجموعة جديدة تحتوي على العناصر الموجودة في المجموعة الأولى ولكنها ليست موجودة في المجموعة الثانية.
أنشئ مجموعتي HashSet:
HashSet<string> set1 = new HashSet<string>();
HashSet<string> set2 = new HashSet<string>();أضف عناصر إلى كلتا المجموعتين:
set1.Add("Apple");
set1.Add("Banana");
set1.Add("Cherry");
set2.Add("Banana");
set2.Add("Kiwi");احسب الفرق (العناصر الموجودة في set1 ولكن ليست في set2):
HashSet<string> difference = new HashSet<string>(set1);
difference.ExceptWith(set2);بعد تنفيذ الكود أعلاه، تحتوي مجموعة الفرق على:
["Apple", "Cherry"]التحدي
سهلقم بإنشاء دالة تسمى GetSetDifference تأخذ اثنين من الـ HashSets من الأعداد الصحيحة (set1 و set2) وتعيد HashSet جديداً يحتوي على فرق المجموعة (العناصر الموجودة في set1 وليست في set2).
ورقة مرجعية
يؤدي فرق المجموعات (Set Difference) إلى إنشاء مجموعة جديدة تحتوي على العناصر الموجودة في المجموعة الأولى ولكنها غير موجودة في المجموعة الثانية.
إنشاء HashSets:
HashSet<string> set1 = new HashSet<string>();
HashSet<string> set2 = new HashSet<string>();احسب الفرق باستخدام ExceptWith():
HashSet<string> difference = new HashSet<string>(set1);
difference.ExceptWith(set2);جرّب بنفسك
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text.RegularExpressions;
class Program {
public static HashSet<int> GetSetDifference(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[] set1Input = line1.Split(' ');
foreach (string item in set1Input) {
if (int.TryParse(item, 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[] set2Input = line2.Split(' ');
foreach (string item in set2Input) {
if (int.TryParse(item, out int num)) {
set2.Add(num);
}
}
}
HashSet<int> difference = GetSetDifference(set1, set2);
// طباعة النتيجة
List<int> sortedResult = new List<int>(difference);
sortedResult.Sort();
foreach (int item in sortedResult) {
Console.WriteLine(item);
}
}
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس 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)