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

iter.Seq2

تكرار بأزواج قيم (مفتاح وقيمة) iter.Seq2

iter.Seq2[K, V] نفس فكرة iter.Seq لكن بزوج قيم لكل خطوة — الصيغة التي تستخدمها maps.All وslices.All لإرجاع مفتاح أو فهرس مع القيمة معًا.

iter.Seq2[K, V] دالة بتوقيع func(yield func(K, V) bool) — نفس فكرة Seq تمامًا لكن yield يستقبل قيمتين لكل خطوة بدل واحدة. حزمة maps تستخدمها في All(m) لتحويل خريطة عادية لتكرار كسول بزوج مفتاح/قيمة، وحزمة slices تستخدمها في All(s) لإرجاع فهرس وقيمة معًا.

ميزتها الأساسية أنها قابلة للّف: يمكن كتابة دالة توليد جديدة تأخذ iter.Seq2 موجودًا (مثل maps.All) وتصفّي أو تحوّل قيمه قبل تمريره لـ range، دون تخصيص خريطة أو شريحة وسيطة كاملة أولًا.

الصياغة

type Seq2[K, V any] func(yield func(K, V) bool)

📄 مثال

func OnlyAdults(m map[string]int) iter.Seq2[string, int] {
  return func(yield func(string, int) bool) {
    for name, age := range maps.All(m) {
      if age >= 18 {
        if !yield(name, age) {
          return
        }
      }
    }
  }
}

for name, age := range OnlyAdults(ages) {
  fmt.Println(name, age)
}

أهم النقاط

العنصرالوظيفة
func(yield func(K, V) bool)توقيع دالة Seq2 — تستدعي yield لكل زوج مفتاح/قيمة
maps.All(m)يحوّل خريطة عادية لـ iter.Seq2[K, V] قابل للّف بدوال أخرى قبل المرور عليه
slices.All(s)يعيد iter.Seq2[int, E] للشريحة — فهرس وقيمة معًا، قابل للتمرير كقيمة لدالة أخرى بعكس range المباشر

💡 نصائح عملية

  • لفّ تكرارًا موجودًا (مثل maps.All) بدالة توليد جديدة لتصفية أو تحويل القيم قبل المرور عليها فعليًا، دون تخصيص بنية وسيطة
  • استخدم maps.Collect لتجميع نتيجة Seq2 بخريطة جديدة إن احتجت النتيجة كقيمة مخزَّنة لا مرورًا مباشرًا

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

  • الاعتقاد أن iter.Seq2 يضمن ترتيبًا ثابتًا عند لفّ خريطة — الترتيب يبقى غير مضمون تمامًا كـ range العادي على map
  • الخلط بين "type X = Y" (أليس) و"type X Y" (نوع جديد) عند تعريف دالة تعيد Seq2 بنوع مسمّى مخصّص

خصائص ذات صلة

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