تخطَّ إلى المحتوى

slices.Collect

تجميع تكرار داخل شريحة جديدة slices.Collect

slices.Collect يأخذ iter.Seq[V] ويجمع كل القيم الناتجة عنه داخل شريحة []V جديدة — الجسر بين عالم التكرارات الكسولة والشرائح العادية.

لما تحتاج نتيجة تكرار (iterator) كشريحة عادية مخزَّنة، لا مجرّد المرور عليها مرّة واحدة، slices.Collect يستهلك iter.Seq[V] بالكامل ويعيد []V جديدة. الحزمة maps استفادت من هذا التغيير أيضًا: maps.Keys وmaps.Values تعيدان الآن iter.Seq بدل شريحة جاهزة كما كان بنسخ أقدم من خارج stdlib، فيحتاج من يريد شريحة فعلية استدعاء Collect صراحة.

هذا يفتح استخدامًا عمليًا مباشرًا: ترتيب ثابت للمرور على خريطة، وهو ما كان يحتاج سابقًا استخراج المفاتيح يدويًا ثم فرزها.

الصياغة

func Collect[E any](seq iter.Seq[E]) []E

📄 مثال

ages := map[string]int{"سارة": 22, "براء": 25, "علي": 30}

names := slices.Collect(maps.Keys(ages))   // شريحة بلا ترتيب مضمون
fmt.Println(len(names))                    // 3

أهم النقاط

العنصرالوظيفة
slices.Collect(seq)يجمع أي iter.Seq[V] داخل []V جديدة، بلا فرز
maps.Keys(m)يعيد الآن iter.Seq[K] (منذ Go 1.23) بدل شريحة جاهزة كإصدارات أقدم

💡 نصائح عملية

  • لو تحتاج ترتيبًا ثابتًا لمفاتيح خريطة استخدم slices.Sorted(maps.Keys(m)) مباشرة بدل Collect متبوعًا بفرز يدوي
  • لا تستدعِ Collect إلا لو تحتاج فعلًا النتيجة كشريحة مخزَّنة — لو كل ما تريده مرور واحد فـ range مباشرة على iterator نفسه أوفر

⚠️ أخطاء شائعة

  • استدعاء slices.Collect على تكرار لا ينتهي منطقيًا (تسلسل لانهائي) — يعلّق البرنامج لأنه يحاول تجميع كل القيم قبل الإرجاع
  • توقّع أن Collect تفرز الناتج — لا تفعل، استخدم slices.Sorted لو تحتاج فرزًا

خصائص ذات صلة

🎓 تريد فهم الصورة الكاملة خطوة بخطوة؟ ابدأ من مسار GO الكامل بالعربي.