التحقق من العضوية في المجموعة
جزء من قسم 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) الحقيقي.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلقم ببناء نظام للتحقق من أعضاء الفريق يتحقق مما إذا كان أشخاص معينون جزءاً من فريق المشروع باستخدام أسلوب (idiom) المجموعات (set) في Go. يوضح هذا التحدي كيفية استخدام أسلوب comma ok لاختبار العضوية في مجموعة.
ستتلقى مدخلين:
- سلسلة نصية تحتوي على أعضاء الفريق مفصولين بفاصلة (على سبيل المثال،
"Alice,Bob,Charlie,Diana,Eve") - سلسلة نصية تحتوي على الأشخاص المراد التحقق منهم مفصولين بفاصلة (على سبيل المثال،
"Bob,Frank,Alice,Grace,Charlie")
مهمتك هي:
- إنشاء مجموعة باستخدام أسلوب Go المتمثل في
map[string]struct{}لتخزين أعضاء الفريق - تحليل سلسلة المدخلات الأولى عن طريق تقسيمها عند الفواصل للحصول على أسماء أعضاء الفريق الفردية
- إضافة كل عضو في الفريق إلى مجموعتك باستخدام قيمة الـ struct الفارغة
{} - تحليل سلسلة المدخلات الثانية عن طريق تقسيمها عند الفواصل للحصول على قائمة الأشخاص المراد التحقق منهم
- لكل شخص يتم التحقق منه، استخدم أسلوب comma ok
_, ok := teamSet[person]لاختبار العضوية - عرض نتائج التحقق لكل شخص يتم فحصه:
- إذا كان الشخص في الفريق:
"[person] is on the team" - إذا لم يكن الشخص في الفريق:
"[person] is not on the team"
- إذا كان الشخص في الفريق:
- بعد التحقق من جميع الأشخاص، اعرض ملخصاً:
"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
// عرض نتائج التحقق والملخص
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1تدفق التحكم المتقدم
جملة Switch مع `fallthrough`الخروج من الحلقات المتداخلةالاستمرار في حلقة محددةجملة `goto`ملخص - التحكم المتقدم في الحلقات2الـ Structs والميثودز (Methods)
تعريف الـ Methods على الـ Structsالـ Value Receiversالـ Pointer Receiversاختيار الـ Receiversالـ Methods مقابل الـ Functionsملخص - سلوك الـ Struct5تعمق في الـ Maps
Maps من نوع Structsالـ Pointers كقيم في الـ Mapsالتحقق من الـ Nil Mapsمقارنة الـ Mapsمراجعة - عداد تكرار الكلمات3الواجهات (الأساسيات)
ما هي الواجهة؟تعريف الواجهةتطبيق الواجهةاستخدام أنواع الواجهاتالواجهة الفارغةتأكيدات النوع (Type Assertions)تبديل النوع (Type Switch)ملخص - الأشكال والسلوكيات6أسلوب Go الاصطلاحي: المجموعات
أسلوب المجموعات في Goإنشاء مجموعةالإضافة إلى مجموعةالتحقق من العضوية في المجموعةالحذف من مجموعةالتكرار عبر عناصر المجموعةمراجعة - أسماء مستخدمين فريدة