Go Programming

إتقان تكرار الخرائط في Go

Spread the love

تُعدّ خرائط Go بنية بيانات أساسية لتخزين أزواج المفتاح-القيمة. ويُعتبر التكرار الفعال من خلال هذه الأزواج أمرًا بالغ الأهمية في العديد من التطبيقات. توفر هذه المقالة دليلاً شاملاً للعمل مع الخرائط، من إنشائها إلى استعراضها، مع التركيز على أفضل الممارسات والأخطاء الشائعة.

محتويات

إعلان الخرائط وتهيئتها

يتم إعلان خرائط Go باستخدام دالة make() أو وسيط مركب. تسمح make() بتحديد سعة أولية، مما يحسّن الأداء للخرائط الكبيرة. أما الوسائط المركبة فهي أكثر إيجازًا للخرائط الأصغر المُعرّفة ثابتًا.


package main

import "fmt"

func main() {
  // باستخدام make()
  myMap := make(map[string]int, 10) //سعة أولية 10
  myMap["apple"] = 1
  myMap["banana"] = 2
  myMap["cherry"] = 3

  // باستخدام وسيط مركب
  anotherMap := map[string]int{
    "apple":  1,
    "banana": 2,
    "cherry": 3,
  }

  fmt.Println("myMap:", myMap)
  fmt.Println("anotherMap:", anotherMap)
}

التكرار عبر الخرائط

الطريقة القياسية للتكرار عبر خريطة Go هي استخدام حلقة for...range. من المهم ملاحظة أن ترتيب التكرار ليس مضمونًا وقد يختلف بين التشغيلات. لا تعتمد على ترتيب محدد لمنطق برنامجك.


package main

import "fmt"

func main() {
  myMap := map[string]int{
    "apple":  1,
    "banana": 2,
    "cherry": 3,
  }

  for key, value := range myMap {
    fmt.Printf("المفتاح: %s, القيمة: %dn", key, value)
  }
}

التكرار عبر المفاتيح والقيم بشكل انتقائي

يمكنك اختيار التكرار عبر المفاتيح أو القيم فقط إذا لزم الأمر، باستخدام المُعرّف الفارغ _ لتجاهل العنصر غير المرغوب فيه:


// التكرار عبر المفاتيح فقط
for key := range myMap {
    fmt.Println("المفتاح:", key)
}

// التكرار عبر القيم فقط
for _, value := range myMap {
    fmt.Println("القيمة:", value)
}

الحفاظ على الترتيب أثناء التكرار

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


package main

import (
	"fmt"
	"sort"
)

func main() {
	myMap := map[string]int{
		"apple":  1,
		"banana": 2,
		"cherry": 3,
	}

	keys := make([]string, 0, len(myMap))
	for k := range myMap {
		keys = append(keys, k)
	}
	sort.Strings(keys)

	for _, k := range keys {
		fmt.Printf("المفتاح: %s, القيمة: %dn", k, myMap[k])
	}
}

اترك تعليقاً

لن يتم نشر عنوان بريدك الإلكتروني. الحقول الإلزامية مشار إليها بـ *