الخرائط: مخازن المفتاح والقيمة
إنشاء عناصر الخريطة وقراءتها وكتابتها وحذفها
الخرائط: مخازن المفتاح والقيمة درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
ما الخريطة؟
الخريطة في Go هي مجموعة غير مرتبة من أزواج المفتاح والقيمة. ويجب أن تكون المفاتيح من نوع قابل للمقارنة (مثل السلاسل النصية والأعداد الصحيحة وغير ذلك). الخرائط أنواع مرجعية مدعومة بجدول تجزئة.
إنشاء الخرائط
استخدموا حرفية أو make:
package main
import "fmt"
func main() {
ages := map[string]int{"Alice": 30, "Bob": 25}
cache := make(map[string]string)
fmt.Println(ages, cache)
}القراءة والكتابة
يمكن الوصول إلى القيم باستخدام m[key] وإسنادها باستخدام m[key] = value. وتُرجع قراءة مفتاح غير موجود قيمة الصفر:
package main
import "fmt"
func main() {
m := map[string]int{}
m["hits"] = 10
m["hits"]++
fmt.Println(m["hits"]) // 11
fmt.Println(m["missing"]) // 0
}التحقق من وجود مفتاح
يميز الشكل ذو القيمتين بين المفتاح غير الموجود وقيمة الصفر:
package main
import "fmt"
func main() {
m := map[string]int{"a": 0}
v, ok := m["a"]
fmt.Println(v, ok) // 0 true
v2, ok2 := m["z"]
fmt.Println(v2, ok2) // 0 false
}حذف الإدخالات
استخدموا الدالة المضمّنة delete. ويُعدّ حذف مفتاح غير موجود عمليةً لا تأثير لها:
package main
import "fmt"
func main() {
m := map[string]int{"x": 1, "y": 2}
delete(m, "x")
delete(m, "z") // no-op
fmt.Println(m) // map[y:2]
}التكرار على خريطة
استخدموا range للتكرار. ولا يكون الترتيب مضمونًا:
package main
import "fmt"
func main() {
scores := map[string]int{"Alice": 90, "Bob": 85}
for name, score := range scores {
fmt.Printf("%s: %d\n", name, score)
}
}الخرائط ذات القيم البنيوية
يمكن للخرائط الاحتفاظ بالبُنى كقيم. حدّثوا القيمة عبر متغير مؤقت (فالبُنى في الخرائط لا يمكن أخذ عناوينها):
package main
import "fmt"
type Point struct{ X, Y int }
func main() {
points := map[string]Point{"A": {1, 2}}
p := points["A"]
p.X = 99
points["A"] = p
fmt.Println(points["A"]) // {99 2}
}الخرائط nil
تُقرأ الخريطة nil مثل الخريطة الفارغة (فتُرجع قيم الصفر)، لكن الكتابة إلى خريطة nil تؤدي إلى panic:
package main
func main() {
var m map[string]int
_ = m["key"] // ok — returns 0
// m["key"] = 1 // PANIC: assignment to nil map
}الخرائط ليست آمنة للاستخدام المتزامن
الخريطة المضمّنة في Go ليست آمنة للاستخدام من goroutines. لا بأس بالقراءات المتزامنة، لكن الكتابات المتزامنة (أو القراءة مع الكتابة) تتطلب mutex أو sync.Map:
package main
import "sync"
func main() {
var mu sync.Mutex
m := map[string]int{}
mu.Lock()
m["key"] = 1
mu.Unlock()
_ = m
}عدّ التكرارات
نمط تقليدي للخرائط، وهو عدّ مرات الظهور:
package main
import "fmt"
func main() {
words := []string{"go", "is", "fast", "go", "is", "go"}
freq := map[string]int{}
for _, w := range words {
freq[w]++
}
fmt.Println(freq) // map[fast:1 go:3 is:2]
}تحقّق سريع
ماذا يحدث عند قراءة مفتاح غير موجود في خريطة Go؟
مراجعة: الخرائط
أهم النقاط:
- الخرائط مخازن غير مرتبة لأزواج المفتاح والقيمة
- استخدموا الشكل ذي القيمتين للتحقق من وجود مفتاح
- لا تكتبوا مطلقًا إلى خريطة nil
- ترتيب التكرار عشوائي، لذا رتّبوا المفاتيح عند الحاجة
- احموا الخرائط باستخدام mutex في الشيفرة المتزامنة
مهمة تدريبية
اكتبوا دالة تستقبل سلسلة نصية وتُرجع map[rune]int يحصي عدد مرات ظهور كل محرف. اختبروها باستخدام السلسلة "hello".
الأسئلة الشائعة
هل درس «الخرائط: مخازن المفتاح والقيمة» مجاني؟
نعم — نص درس «الخرائط: مخازن المفتاح والقيمة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.
ماذا ستتعلم في «الخرائط: مخازن المفتاح والقيمة»؟
إنشاء عناصر الخريطة وقراءتها وكتابتها وحذفها تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟
لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «الخرائط: مخازن المفتاح والقيمة»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟
نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- المصفوفات: مجموعات ثابتة الطول
- الشرائح: قوائم ديناميكية
- الخرائط: مخازن المفتاح والقيمة
- التكرار على المجموعات باستخدام range