لغة Go بالأمثلة: الخرائط (map)

الخرائط هي نوع البيانات الترابطي المدمج في Go (وتسمى أحيانًا جداول التجزئة أو القواميس في لغات أخرى).

package main
import (
    "fmt"
    "maps"
)
func main() {

لإنشاء خريطة فارغة، استخدم الدالة المدمجة make: make(map[key-type]val-type).

    m := make(map[string]int)

أسند أزواج المفاتيح والقيم باستخدام الصيغة المعتادة name[key] = val.

    m["k1"] = 7
    m["k2"] = 13

تعرض طباعة خريطة باستخدام fmt.Println مثلًا جميع أزواج المفاتيح والقيم فيها.

    fmt.Println("map:", m)

احصل على قيمة مفتاح باستخدام name[key].

    v1 := m["k1"]
    fmt.Println("v1:", v1)

إذا لم يكن المفتاح موجودًا، تُعاد القيمة الصفرية لنوع القيمة.

    v3 := m["k3"]
    fmt.Println("v3:", v3)

تعيد الدالة المدمجة len عدد أزواج المفاتيح والقيم عند استدعائها على خريطة.

    fmt.Println("len:", len(m))

تحذف الدالة المدمجة delete أزواج المفاتيح والقيم من الخريطة.

    delete(m, "k2")
    fmt.Println("map:", m)

لحذف جميع أزواج المفاتيح والقيم من خريطة، استخدم الدالة المدمجة clear.

    clear(m)
    fmt.Println("map:", m)

تشير قيمة الإرجاع الثانية الاختيارية عند جلب قيمة من خريطة إلى وجود المفتاح فيها. ويمكن استخدامها للتمييز بين المفاتيح الغائبة والمفاتيح ذات القيم الصفرية مثل 0 أو "". لم نحتج هنا إلى القيمة نفسها، لذلك تجاهلناها باستخدام المعرّف الفارغ _.

    _, prs := m["k2"]
    fmt.Println("prs:", prs)

يمكنك أيضًا التصريح عن خريطة جديدة وتهيئتها في السطر نفسه باستخدام هذه الصيغة.

    n := map[string]int{"foo": 1, "bar": 2}
    fmt.Println("map:", n)

تحتوي الحزمة maps على عدد من الدوال المساعدة المفيدة للخرائط.

    n2 := map[string]int{"foo": 1, "bar": 2}
    if maps.Equal(n, n2) {
        fmt.Println("n == n2")
    }
}

لاحظ أن الخرائط تظهر بالصيغة map[k:v k:v] عند طباعتها باستخدام fmt.Println.

$ go run maps.go 
map: map[k1:7 k2:13]
v1: 7
v3: 0
len: 2
map: map[k1:7]
map: map[]
prs: false
map: map[bar:2 foo:1]
n == n2

المثال التالي: .