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

التحقق من العضوية في المجموعة

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

الآن بعد أن أصبح بإمكانك إضافة عناصر إلى مجموعتك (set)، فإن العملية الأساسية التالية هي التحقق مما إذا كان عنصر معين موجوداً في المجموعة. هنا تبرز الفائدة الكبيرة لأسلوب "comma ok" الخاص بلغة Go.

للتحقق مما إذا كان العنصر موجوداً في مجموعتك، يمكنك استخدام نفس الصيغة المستخدمة للتحقق من وجود مفتاح في الخريطة:

_, ok := colors["red"]
if ok {
    fmt.Println("Red is in the set")
} else {
    fmt.Println("Red is not in the set")
}

تُستخدم الشرطة السفلية _ لأننا لا نهتم بالقيمة الفعلية (والتي تكون دائماً عبارة عن struct فارغ). نحن نهتم فقط بالمتغير المنطقي ok، الذي يخبرنا ما إذا كان المفتاح موجوداً.

يمكنك أيضًا استخدام هذا النمط مباشرةً في جملة if للحصول على كود أكثر إيجازًا:

if _, exists := colors["blue"]; exists {
    fmt.Println("Blue is in the set")
}

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

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

quiz iconاختبر نفسك

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

challenge icon

التحدي

سهل

قم ببناء نظام للتحقق من أعضاء الفريق يتحقق مما إذا كان أشخاص معينون جزءاً من فريق المشروع باستخدام أسلوب (idiom) المجموعات (set) في Go. يوضح هذا التحدي كيفية استخدام أسلوب comma ok لاختبار العضوية في مجموعة.

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

  • سلسلة نصية تحتوي على أعضاء الفريق مفصولين بفاصلة (على سبيل المثال، "Alice,Bob,Charlie,Diana,Eve")
  • سلسلة نصية تحتوي على الأشخاص المراد التحقق منهم مفصولين بفاصلة (على سبيل المثال، "Bob,Frank,Alice,Grace,Charlie")

مهمتك هي:

  1. إنشاء مجموعة باستخدام أسلوب Go المتمثل في map[string]struct{} لتخزين أعضاء الفريق
  2. تحليل سلسلة المدخلات الأولى عن طريق تقسيمها عند الفواصل للحصول على أسماء أعضاء الفريق الفردية
  3. إضافة كل عضو في الفريق إلى مجموعتك باستخدام قيمة الـ struct الفارغة {}
  4. تحليل سلسلة المدخلات الثانية عن طريق تقسيمها عند الفواصل للحصول على قائمة الأشخاص المراد التحقق منهم
  5. لكل شخص يتم التحقق منه، استخدم أسلوب comma ok _, ok := teamSet[person] لاختبار العضوية
  6. عرض نتائج التحقق لكل شخص يتم فحصه:
    • إذا كان الشخص في الفريق: "[person] is on the team"
    • إذا لم يكن الشخص في الفريق: "[person] is not on the team"
  7. بعد التحقق من جميع الأشخاص، اعرض ملخصاً:
    • "Team size: [team_member_count]"
    • "People checked: [people_checked_count]"
    • "Team members found: [found_count]"
    • "Non-team members: [not_found_count]"

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

ورقة مرجعية

للتحقق مما إذا كان عنصر ما موجوداً في مجموعة (خريطة)، استخدم أسلوب "comma ok":

_, ok := colors["red"]
if ok {
    fmt.Println("Red is in the set")
} else {
    fmt.Println("Red is not in the set")
}

تتجاهل الشرطة السفلية _ القيمة لأننا نهتم فقط بمتغير الـ boolean المسمى ok والذي يشير إلى ما إذا كان المفتاح موجوداً.

يمكنك أيضاً استخدام هذا النمط مباشرة في جملة if:

if _, exists := colors["blue"]; exists {
    fmt.Println("Blue is in the set")
}

جرّب بنفسك

package main

import (
	"fmt"
	"strings"
)

func main() {
	// قراءة المدخلات
	var teamMembersInput string
	var peopleToCheckInput string
	fmt.Scanln(&teamMembersInput)
	fmt.Scanln(&peopleToCheckInput)
	
	// تحليل سلاسل المدخلات
	teamMembers := strings.Split(teamMembersInput, ",")
	peopleToCheck := strings.Split(peopleToCheckInput, ",")
	
	// TODO: اكتب الكود الخاص بك أدناه
	// إنشاء مجموعة (set) باستخدام map[string]struct{}
	// إضافة أعضاء الفريق إلى المجموعة
	// التحقق من كل شخص باستخدام صيغة comma ok
	// عرض نتائج التحقق والملخص
	
}
quiz iconاختبر نفسك

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

جميع دروس Logic & Flow