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

الإضافة إلى مجموعة

جزء من قسم المنطق وتدفق التنفيذ في رحلة GO على Coddy. الدرس 33 من 68.

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

لإضافة عنصر إلى مجموعة البيانات الخاصة بك، ما عليك سوى تعيين قيمة البنية الفارغة لمفتاح جديد:

colors["yellow"] = struct{}{}

تنشئ صيغة struct{}{} قيمة بنيوية حرفية فارغة. يحدد struct{} الأول النوع، بينما يهيّئه {} الثاني. هذه هي الطريقة القياسية لإضافة عناصر إلى مجموعة في Go.

يكمن جمال هذا الأسلوب في أنه إذا حاولت إضافة العنصر نفسه مرة أخرى، فإنه يستبدل الإدخال الموجود ببساطة، محافظًا على خاصية تفرّد المجموعة.

لاحظ أن struct{}{} هي الصياغة الصالحة الوحيدة لهذا الإسناد: تؤدي كتابة {} فقط دون اسم النوع إلى خطأ في التجميع: missing type in composite literal. يجب دائمًا توفير النوع بشكل صريح عند إسناد قيمة إلى مفتاح في خريطة خارج تعبير خريطة حرفي.

إضافة عناصر إلى مجموعة سريعة ومباشرة، إذ تستفيد من تطبيق map الفعّال في Go مع توفير سلوك مجموعة حقيقي لتتبّع العناصر الفريدة.

challenge icon

التحدي

سهل

أنشئ نظامًا لتتبّع المهارات يدير القدرات التقنية للمطوّر باستخدام اصطلاح مجموعة Go. يوضّح هذا التحدّي كيفية Add مهارات جديدة إلى مجموعة مع منع التكرارات وتتبع تقدم Learning.

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

  • سلسلة نصية تمثّل العدد المتوقع للمهارات (مثلًا، "5") - وهذا للمرجعية فقط
  • سلسلة نصية تحتوي على مهارات مفصولة بفواصل (مثلًا، "Go,Docker,Kubernetes,Go,React,Docker,Python")

مهمتك هي:

  1. إنشاء مجموعة باستخدام اصطلاح Go ‏map[string]struct{} لتخزين المهارات التقنية الفريدة
  2. Initialize المجموعة بثلاث مهارات ابتدائية: "Programming" و"Problem Solving" و"Communication"
  3. تحليل سلسلة الإدخال بتقسيمها عند الفواصل للحصول على أسماء المهارات individual
  4. Process ALL المهارات من السلسلة المفصولة بفواصل (iterate عبر الشريحة بأكملها، من دون استخدام مَعلمة العدد)
  5. لكل مهارة من الإدخال، أضفها إلى مجموعتك باستخدام struct{}{} كقيمة
  6. اعرض نتائج المعالجة بطباعة كل مهارة أثناء معالجتها:
    • إذا كانت المهارة جديدة في المجموعة: "Learning new skill: [skill]"
    • إذا كانت المهارة موجودة بالفعل في المجموعة: "Already mastered: [skill]"
  7. بعد معالجة جميع المهارات، اعرض ملخصًا للتقدم:
    • "Skills processed: [total_processed]" - استخدم طول شريحة المهارات
    • "New skills learned: [new_skills_count]"
    • "Total skills mastered: [total_unique_skills]"
  8. أخيرًا، اعرض List جميع المهارات في مجموعة مهارات المطوّر:
    • العنوان: "Complete skill set:"
    • كل مهارة في سطر منفصل: "✓ [skill]"

مهم: استخدم range للتكرار عبر جميع المهارات في الشريحة، وليس مَعلمة العدد. العدد متوفر للمرجعية، لكنه يجب ألا يتحكم في الحلقة. استخدم الحزمة strings لتقسيم سلسلة الإدخال. للتحقق مما إذا كانت مهارة موجودة بالفعل قبل إضافتها، استخدم اصطلاح comma ok: _, exists := skillSet[skill]. يوضّح هذا التحدّي كيف أن Add العناصر إلى مجموعة Go يتعامل تلقائيًا مع التفرد، مع توفير أداء بحث سريع لاختبار العضوية.

جرّب بنفسك

package main

import (
	"fmt"
	"sort"
	"strconv"
	"strings"
)

func main() {
	// اقرأ المدخلات
	var countStr string
	var skillsStr string
	fmt.Scanln(&countStr)
	fmt.Scanln(&skillsStr)
	
	// حوّل سلسلة count إلى عدد صحيح (للمرجع فقط - غير مستخدمة في الحلقة)
	_, _ = strconv.Atoi(countStr)
	
	// هيّئ مجموعة المهارات بالمهارات الأولية
	skillSet := map[string]struct{}{
		"Programming":     struct{}{},
		"Problem Solving": struct{}{},
		"Communication":   struct{}{},
	}
	
	// قسّم سلسلة المهارات إلى مهارات فردية
	skills := strings.Split(skillsStr, ",")
	
	// TODO: اكتب الكود الخاص بك أدناه
	// عالج كل مهارة باستخدام range للتكرار على جميع المهارات في الـ slice
	// استخدم اصطلاح comma ok: _, exists := skillSet[skill]
	// أضف مهارات جديدة باستخدام: skillSet[skill] = struct{}{}
	// اعرض نتائج المعالجة لكل مهارة
	// احسب واعرض ملخص التقدم باستخدام len(skills)
	// List all skills in the complete skill set (consider sorting for consistent output)
	
}
quiz iconاختبر نفسك

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

جميع دروس المنطق وتدفق التنفيذ

تدرّب بنفسك: مترجم Go عبر الإنترنت