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

الحذف من مجموعة

جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 35 من 68.

في بعض الأحيان قد تحتاج إلى إزالة عناصر من مجموعتك، وتجعل لغة Go هذا الأمر سهلاً ومباشراً باستخدام دالة delete() المدمجة. وبما أن مجموعتك هي في الأساس عبارة عن خريطة (map)، فإن إزالة عنصر تعمل تماماً مثل إزالة مفتاح من خريطة.

لإزالة عنصر من مجموعتك، استخدم الدالة delete() مع مجموعتك والعنصر الذي تريد إزالته:

delete(colors, "red")

تأخذ الدالة delete() معاملين: الخريطة (مجموعتك) والمفتاح الذي تريد إزالته. إذا كان العنصر موجوداً في المجموعة، فسيتم حذفه. إذا لم يكن العنصر موجوداً، فلن تفعل الدالة شيئاً - ولن يتم طرح أي خطأ.

هذا السلوك مثالي للمجموعات (sets) لأنك غالباً ما تريد التأكد من عدم وجود عنصر ما، بغض النظر عما إذا كان موجوداً في البداية أم لا. تتميز هذه العملية بالسرعة والكفاءة، مع الحفاظ على مزايا الأداء لتطبيق الخريطة (map) الأساسي في لغة Go.

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

challenge icon

التحدي

سهل

قم ببناء نظام لإدارة كتب المكتبة يقوم بإزالة الكتب من مجموعات الأنواع المختلفة باستخدام أسلوب الـ set في لغة Go. يوضح هذا التحدي كيفية استخدام وظيفة delete() لإزالة العناصر من المجموعات (sets) مع تتبع عملية الإزالة.

ستتلقى مدخلين:

  • سلسلة نصية تحتوي على الكتب في مجموعة الخيال العلمي مفصولة بفاصلة (على سبيل المثال، "1984,Dune,Foundation,Neuromancer,Brave New World")
  • سلسلة نصية تحتوي على الكتب المراد إزالتها مفصولة بفاصلة (على سبيل المثال، "Dune,Harry Potter,Foundation,Twilight,1984")

مهمتك هي:

  1. إنشاء مجموعة (set) باستخدام أسلوب Go المعتاد map[string]struct{} لتخزين كتب الخيال
  2. تحليل سلسلة الإدخال الأولى عن طريق تقسيمها عند الفواصل للحصول على عناوين الكتب الفردية
  3. إضافة كل كتاب إلى مجموعتك باستخدام قيمة الـ struct الفارغة {}
  4. تحليل سلسلة الإدخال الثانية عن طريق تقسيمها عند الفواصل للحصول على قائمة الكتب المراد إزالتها
  5. لكل كتاب مطلوب إزالته، تحقق مما إذا كان موجوداً في المجموعة باستخدام أسلوب comma ok
  6. عرض عملية الإزالة لكل كتاب تتم معالجته:
    • إذا كان الكتاب موجوداً في المجموعة: "Removing: [book_title]"
    • إذا لم يكن الكتاب موجوداً في المجموعة: "Not found: [book_title]"
  7. استخدم وظيفة delete() لإزالة الكتب الموجودة في المجموعة
  8. بعد معالجة جميع طلبات الإزالة، اعرض ملخصاً:
    • "Initial collection size: [initial_count]"
    • "Removal requests: [requests_count]"
    • "Books successfully removed: [removed_count]"
    • "Books not found: [not_found_count]"
    • "Final collection size: [final_count]"
  9. أخيراً، قم بإدراج جميع الكتب المتبقية في المجموعة:
    • العنوان: "Remaining books in fiction collection:"
    • كل كتاب في سطر منفصل: "- [book_title]"
    • إذا لم يتبق أي كتب: "- Collection is empty"

استخدم حزمة strings لتقسيم سلاسل الإدخال عند الفواصل. يوضح هذا التحدي كيف تقوم وظيفة delete() بإزالة العناصر بأمان من مجموعة Go، دون حدوث أخطاء حتى عند محاولة إزالة عناصر غير موجودة، مما يجعلها مثالية لعمليات التنظيف.

ورقة مرجعية

لإزالة عناصر من مجموعة (set) في لغة Go، استخدم دالة delete() المدمجة:

delete(colors, "red")

تأخذ دالة delete() معاملين: الخريطة (المجموعة الخاصة بك) والمفتاح الذي تريد إزالته. إذا كان العنصر موجوداً، فسيتم حذفه. وإذا لم يكن موجوداً، فلا تفعل الدالة شيئاً - ولا يتم إلقاء أي خطأ.

هذا يجعل delete() مثالية للمجموعات لأنك غالباً ما تريد التأكد من عدم وجود عنصر ما، بغض النظر عما إذا كان موجوداً في الأصل أم لا.

جرّب بنفسك

package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
	"strings"
)

func main() {
	// قراءة المدخلات باستخدام Scanner لدعم عناوين الكتب التي تحتوي على مسافات
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	fictionBooks := scanner.Text()
	scanner.Scan()
	booksToRemove := scanner.Text()

	// تحليل سلاسل المدخلات
	fictionList := strings.Split(fictionBooks, ",")
	removeList := strings.Split(booksToRemove, ",")

	// TODO: اكتب الكود الخاص بك أدناه
	// 1. إنشاء مجموعة (set) باستخدام map[string]struct{} لتخزين الكتب الخيالية
	// 2. إضافة كل كتاب من fictionList إلى المجموعة
	// 3. معالجة كل كتاب في removeList والتحقق مما إذا كان موجوداً
	// 4. عرض عملية الإزالة واستخدام دالة delete()
	// 5. عرض إحصائيات الملخص
	// 6. قائمة الكتب المتبقية في المجموعة
	// تذكر ترتيب الكتب المتبقية للحصول على مخرجات متسقة

	_ = sort.Strings // قم بإزالة هذا السطر بمجرد استخدام sort
	_ = fmt.Println  // قم بإزالة هذا السطر بمجرد استخدام fmt
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow