رياضيات - الفرق بين المجموعات
جزء من قسم 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).
جرّب بنفسك
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)