جامع عناصر فريدة
جزء من قسم Logic & Flow في رحلة GO على Coddy — الدرس 68 من 68.
التحدي
سهلقم بإنشاء نظام لإزالة التكرار يستخدم نمط الـ set الاصطلاحي في لغة Go لتصفية العناصر الفريدة من مجموعات النصوص. سيختبر هذا التحدي قدرتك على استخدام اصطلاح map[string]struct{} لتتبع العناصر التي تمت رؤيتها وبناء مجموعات تحتوي فقط على عناصر فريدة.
ستتلقى مدخلين:
- سلسلة نصية تحتوي على عناصر مفصولة بفاصلة (على سبيل المثال،
"apple,banana,apple,orange,banana,grape,apple") - سلسلة نصية تحتوي على عناصر إضافية لدمجها، مفصولة أيضاً بفاصلة (على سبيل المثال،
"kiwi,apple,mango,banana,kiwi")
مهمتك هي:
- إنشاء دالة تسمى
getUniqueItemsتأخذ شريحة (slice) من النصوص وتعيد شريحة جديدة تحتوي فقط على النصوص الفريدة - داخل هذه الدالة، استخدم اصطلاح
map[string]struct{}لتتبع العناصر التي تمت رؤيتها - قم بالمرور على شريحة الإدخال ولكل عنصر:
- تحقق مما إذا كان العنصر موجوداً في الـ set الخاص بك باستخدام اصطلاح comma ok
- إذا لم تتم رؤية العنصر من قبل، فقم بإضافته إلى كل من الـ set وشريحة النتيجة
- قم بتحليل المدخل الأول عن طريق التقسيم عند الفواصل للحصول على قائمة العناصر الأولية
- قم بتحليل المدخل الثاني عن طريق التقسيم عند الفواصل للحصول على العناصر الإضافية
- اعرض رأس النظام:
"=== UNIQUE ITEM COLLECTOR ===" - اعرض العناصر الأصلية:
"Original items: [comma-separated list of all original items]" - اعرض العناصر الإضافية:
"Additional items: [comma-separated list of all additional items]" - استخدم دالة
getUniqueItemsللحصول على العناصر الفريدة من القائمة الأصلية - اعرض العناصر الأصلية الفريدة:
"Unique original items: [comma-separated list of unique items from original list]" - قم بدمج كلتا شريحتي الإدخال في شريحة واحدة تحتوي على جميع العناصر
- استخدم دالة
getUniqueItemsللحصول على العناصر الفريدة من القائمة المدمجة - اعرض العناصر الفريدة النهائية:
"Final unique items: [comma-separated list of all unique items]" - اعرض إحصائيات المجموعة:
"=== COLLECTION STATISTICS ===""Total original items: [count of original items]""Total additional items: [count of additional items]""Total combined items: [count of all items combined]""Unique items found: [count of unique items]""Duplicates removed: [total combined items minus unique items]"
- اعرض رسالة الإكمال:
"Unique item collection completed successfully"
استخدم حزمة strings لتقسيم سلاسل الإدخال وحزمة fmt للإخراج. عند دمج العناصر للعرض، استخدم strings.Join مع فاصلة. يوضح هذا التحدي كيف يحل اصطلاح الـ set في Go بكفاءة المشكلة الشائعة المتمثلة في إزالة التكرارات من المجموعات، وهو نمط ستستخدمه بشكل متكرر في تطبيقات معالجة البيانات.
جرّب بنفسك
package main
import (
"fmt"
"strings"
)
func main() {
// قراءة المدخلات
var input1 string
var input2 string
fmt.Scanln(&input1)
fmt.Scanln(&input2)
// تحليل سلاسل المدخلات إلى شرائح (slices)
originalItems := strings.Split(input1, ",")
additionalItems := strings.Split(input2, ",")
// TODO: اكتب الكود الخاص بك هنا
// 1. قم بإنشاء دالة getUniqueItems التي تستخدم أسلوب map[string]struct{}
// 2. معالجة العناصر الأصلية للحصول على العناصر الفريدة
// 3. دمج كلتا الشريحتين والحصول على العناصر الفريدة من القائمة المدمجة
// 4. حساب الإحصائيات
// عرض ترويسة النظام
fmt.Println("=== UNIQUE ITEM COLLECTOR ===")
// عرض العناصر الأصلية والإضافية
fmt.Printf("Original items: %s\n", strings.Join(originalItems, ","))
fmt.Printf("Additional items: %s\n", strings.Join(additionalItems, ","))
// TODO: عرض العناصر الأصلية الفريدة، العناصر الفريدة النهائية، والإحصائيات
// استخدم fmt.Printf و strings.Join لتنسيق المخرجات
}جميع دروس 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)ملخص - الأشكال والسلوكيات