التحقق من العضوية في المجموعة
جزء من قسم المنطق وتدفق التنفيذ في رحلة GO على Coddy. الدرس 34 من 68.
الآن بعد أن أصبح بإمكانك إضافة عناصر إلى مجموعتك، فإن العملية الأساسية التالية هي التحقق مما إذا كان عنصر محدد موجودًا في المجموعة. وهنا تصبح طريقة Go الاصطلاحية "comma ok" مفيدة للغاية.
للتحقق مما إذا كان عنصر موجودًا في مجموعة، تستخدم الصياغة نفسها المستخدمة للتحقق من وجود مفتاح في map:
_, ok := colors["red"]
if ok {
fmt.Println("Red is in the set")
} else {
fmt.Println("Red is not in the set")
}يُستخدم الشرطة السفلية _ لأننا لا نهتم بالقيمة الفعلية (والتي تكون دائمًا بنية فارغة). كل ما يهمنا هو المتغير المنطقي ok، الذي يخبرنا ما إذا كان المفتاح موجودًا.
يمكنك أيضًا استخدام هذا النمط مباشرةً في عبارة if للحصول على شيفرة أكثر إيجازًا:
if _, exists := colors["blue"]; exists {
fmt.Println("Blue is in the set")
}اختبار العضوية هذا سريع وفعّال، إذ يستفيد من تنفيذ map المحسّن في Go ليمنحك مزايا الأداء التي توفرها بنية بيانات مجموعة حقيقية.
التحدي
سهلأنشئ نظامًا للتحقق من أعضاء team، يفحص ما إذا كان أشخاص محددون جزءًا من فريق مشروع باستخدام اصطلاح Go الخاص بالمجموعة. يوضّح هذا التحدي كيفية استخدام اصطلاح comma ok لاختبار العضوية في مجموعة.
ستتلقى مدخلين:
- سلسلة تحتوي على أعضاء team مفصولين بفواصل (مثل:
"Alice,Bob,Charlie,Diana,Eve") - سلسلة تحتوي على أشخاص يجب التحقق منهم، مفصولين بفواصل (مثل:
"Bob,Frank,Alice,Grace,Charlie")
مهمتك هي:
- إنشاء مجموعة باستخدام اصطلاح Go
map[string]struct{}لتخزين أعضاء team - تحليل سلسلة الإدخال الأولى بتقسيمها عند الفواصل للحصول على أسماء أعضاء team الفرديين
- إضافة كل عضو من أعضاء team إلى مجموعتك باستخدام قيمة البنية الفارغة
{} - تحليل سلسلة الإدخال الثانية بتقسيمها عند الفواصل للحصول على قائمة الأشخاص المطلوب إجراء verification لهم
- لكل شخص يجب التحقق منه، استخدم اصطلاح comma ok
_, ok := teamSet[person]لاختبار العضوية - عرض نتائج verification لكل شخص قيد التحقق:
- إذا كان الشخص ضمن team:
"[person] is on the team" - إذا لم يكن الشخص ضمن team:
"[person] is not on the team"
- إذا كان الشخص ضمن 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، إذ يعيد كلًا من القيمة وقيمة منطقية تشير إلى ما إذا كان المفتاح exists.
جرّب بنفسك
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: اكتب الكود الخاص بك أدناه
// أنشئ مجموعة باستخدام map[string]struct{}
// أضف أعضاء الفريق إلى المجموعة
// تحقق من كل شخص باستخدام اصطلاح comma ok
// اعرض نتائج التحقق والملخص
}يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس المنطق وتدفق التنفيذ
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إنشاء مجموعةالإضافة إلى مجموعةالتحقق من العضوية في المجموعةالحذف من مجموعةالتكرار عبر عناصر المجموعةمراجعة - أسماء مستخدمين فريدةتدرّب بنفسك: مترجم Go عبر الإنترنت