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

slices.Sorted

تجميع تكرار وفرزه دفعة واحدة slices.Sorted

slices.Sorted يجمع قيم iter.Seq[E] داخل شريحة جديدة ثم يفرزها مباشرة — اختصار عملي بديل لاستخراج المفاتيح يدويًا ثم استدعاء sort.

Sorted يعمل فقط مع أنواع تدعم الترتيب الطبيعي (أعداد، نصوص) عبر القيد cmp.Ordered. لو النوع لا يدعم هذا الترتيب مباشرة، أو أردت ترتيبًا مخصّصًا (عكسيًا، أو حسب حقل من struct)، تُستخدم SortedFunc بدالة مقارنة تعيد سالبًا أو صفرًا أو موجبًا تمامًا كدالة sort.Slice.

slices.Values يحوّل شريحة عادية موجودة مسبقًا إلى iter.Seq[E]، فيصبح تمريرها لـ Sorted أو SortedFunc ممكنًا مباشرة دون تحويل يدوي إضافي.

الصياغة

func Sorted[E cmp.Ordered](seq iter.Seq[E]) []E
func SortedFunc[E any](seq iter.Seq[E], cmp func(E, E) int) []E

📄 مثال

ages := map[string]int{"سارة": 22, "براء": 25, "علي": 30}
names := slices.Sorted(maps.Keys(ages))   // ترتيب أبجدي ثابت بدل ترتيب map العشوائي

words := []string{"موز", "تفاح", "عنب"}
rev := slices.SortedFunc(slices.Values(words), func(a, b string) int {
  return strings.Compare(b, a)   // عكس الترتيب الافتراضي
})

أهم النقاط

العنصرالوظيفة
Sorted(seq)يعمل فقط مع أنواع تدعم الترتيب الطبيعي (أعداد، نصوص) عبر cmp.Ordered
SortedFunc(seq, cmp)يقبل أي نوع، بدالة مقارنة مخصّصة تعيد سالب/صفر/موجب كـ sort.Slice
slices.Values(s)يحوّل شريحة عادية إلى iter.Seq[E] ليصبح قابلًا للتمرير لـ Sorted أو SortedFunc

💡 نصائح عملية

  • مرّر نتيجة maps.Keys أو maps.Values مباشرة لـ Sorted دون الحاجة لتخصيص شريحة وسيطة يدويًا أولًا
  • استخدم SortedFunc للترتيب العكسي أو الترتيب حسب حقل من struct بدل تعديل النتيجة يدويًا بعد Sorted

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

  • استدعاء Sorted على نوع لا يدعم المقارنة الطبيعية (مثل struct) دون استخدام SortedFunc بدلًا منه — خطأ ترجمة (compile error)
  • استخدام Sorted لتسلسل ضخم جدًا لا تحتاج فرزه كاملًا فعلًا — يخصّص ويفرز شريحة كاملة بالذاكرة

خصائص ذات صلة

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