مراجعة - أسماء مستخدمين فريدة
جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 37 من 68.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
التحدي
سهلقم ببناء نظام لتسجيل أسماء المستخدمين يمنع تكرار الأسماء باستخدام أسلوب الـ set (المجموعة) المتبع في لغة Go. يوضح هذا التحدي كيفية إنشاء نظام قوي لإدارة المستخدمين يضمن تفرد اسم المستخدم عبر جميع التسجيلات.
ستتلقى مدخلين:
- سلسلة نصية تحتوي على أسماء المستخدمين الموجودة مسبقاً مفصولة بفاصلة (على سبيل المثال،
"alice123,bob_dev,charlie2024,diana_codes") - سلسلة نصية تحتوي على محاولات تسجيل أسماء مستخدمين جديدة مفصولة بفاصلة (على سبيل المثال،
"eve_user,alice123,frank_dev,bob_dev,grace2024,alice123")
مهمتك هي:
- إنشاء مجموعة (set) باستخدام أسلوب Go المتمثل في
map[string]struct{}لتخزين أسماء المستخدمين المسجلين - تحليل السلسلة النصية الأولى للمدخلات عن طريق تقسيمها عند الفواصل للحصول على أسماء المستخدمين الموجودة
- إضافة كل اسم مستخدم موجود إلى مجموعتك باستخدام قيمة الـ struct الفارغة
{} - تحليل السلسلة النصية الثانية للمدخلات عن طريق تقسيمها عند الفواصل للحصول على محاولات التسجيل الجديدة
- لكل محاولة تسجيل، تحقق مما إذا كان اسم المستخدم موجوداً بالفعل في المجموعة باستخدام أسلوب comma ok
- عرض عملية التسجيل لكل محاولة:
- إذا كان اسم المستخدم متاحاً:
"Registered: [username]"وقم بإضافته إلى المجموعة - إذا كان اسم المستخدم موجوداً بالفعل:
"Username taken: [username]"
- إذا كان اسم المستخدم متاحاً:
- بعد معالجة جميع محاولات التسجيل، قم بعرض ملخص شامل:
"Registration Summary:""Initial usernames: [initial_count]""Registration attempts: [attempts_count]""Successful registrations: [successful_count]""Rejected (duplicate): [rejected_count]""Total registered usernames: [total_count]"
- أخيراً، قم بإدراج جميع أسماء المستخدمين المسجلين في النظام:
- العنوان:
"All registered usernames:" - كل اسم مستخدم في سطر منفصل:
"@[username]"
- العنوان:
استخدم حزمة strings لتقسيم سلاسل المدخلات عند الفواصل. يوضح هذا التحدي كيف يوفر أسلوب الـ set في Go حلاً فعالاً لمنع التكرار في أنظمة تسجيل المستخدمين، مما يضمن سلامة البيانات مع توفير أداء بحث سريع للتحقق من صحة اسم المستخدم.
جرّب بنفسك
package main
import (
"fmt"
"sort"
"strings"
)
func main() {
// قراءة المدخلات
var existingUsernames string
var newRegistrations string
fmt.Scanln(&existingUsernames)
fmt.Scanln(&newRegistrations)
// تحليل سلاسل المدخلات
existing := strings.Split(existingUsernames, ",")
attempts := strings.Split(newRegistrations, ",")
// إنشاء مجموعة (set) باستخدام أسلوب Go
userSet := make(map[string]struct{})
// TODO: اكتب الكود الخاص بك أدناه
// 1. إضافة أسماء المستخدمين الموجودة إلى المجموعة
// 2. معالجة كل محاولة تسجيل
// 3. عرض نتائج التسجيل لكل محاولة
// 4. حساب وعرض الملخص
// 5. قائمة بجميع أسماء المستخدمين المسجلين (تذكر الفرز للحصول على مخرجات متسقة)
}جميع دروس 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إنشاء مجموعةالإضافة إلى مجموعةالتحقق من العضوية في المجموعةالحذف من مجموعةالتكرار عبر عناصر المجموعةمراجعة - أسماء مستخدمين فريدة