0Pricing
Go Academy · درس

البنية الداخلية للخرائط

افهم كيفية تخزين الخرائط للبيانات

البنية الداخلية للخرائط درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.

ما هي الخريطة

تخزن الخريطة أزواجًا من المفاتيح والقيم. ترتبط كل مفتاح بقيمة واحدة، وتكون عمليات البحث سريعة جدًا في المتوسط.

في Go تكتب map[KeyType]ValueType.

package main

import "fmt"

func main() {
	ages := map[string]int{"Ann": 30, "Bob": 25}
	fmt.Println(ages["Ann"])
}

جداول التجزئة في الأساس

تُنفَّذ خرائط Go باستخدام جداول التجزئة. تحول دالة التجزئة كل مفتاح إلى رقم يشير إلى حاوية توجد فيها القيمة.

الحاويات

تخزن الخريطة الإدخالات في حاويات. تحتوي كل حاوية على عدة أزواج من المفاتيح والقيم. تحدد تجزئة المفتاح الحاوية التي ينتقل إليها، مما يوفر عمليات بحث سريعة بمتوسط تعقيد O(1).

الإنشاء باستخدام make

يمكنك إنشاء خريطة فارغة باستخدام make. ويمكنك اختياريًا تحديد تلميح للحجم لتخصيص مساحة مسبقًا.

package main

import "fmt"

func main() {
	scores := make(map[string]int)
	scores["x"] = 10
	fmt.Println(scores)
}

الخرائط nil

تكون الخريطة المعلنة دون تهيئة nil. يمكنك القراءة من خريطة nil، فتحصل على القيم الصفرية، لكن الكتابة إليها تؤدي إلى panic. احرص دائمًا على تهيئتها قبل الكتابة.

package main

import "fmt"

func main() {
	var m map[string]int
	fmt.Println(m == nil)
	fmt.Println(m["missing"])
}

الإضافة والتحديث

تؤدي إسناد قيمة إلى مفتاح إلى إضافته إذا كان جديدًا، أو إلى استبدال القيمة الموجودة.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 1}
	m["b"] = 2
	m["a"] = 99
	fmt.Println(m)
}

حذف المفاتيح

تزيل الدالة المضمنة delete مفتاحًا. وحذف مفتاح غير موجود عملية آمنة لا تفعل شيئًا.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 1, "b": 2}
	delete(m, "a")
	fmt.Println(m)
}

طول الخريطة

تعيد len عدد أزواج المفاتيح والقيم الموجودة حاليًا في الخريطة.

package main

import "fmt"

func main() {
	m := map[string]int{"a": 1, "b": 2, "c": 3}
	fmt.Println(len(m))
}

تنمو الخرائط تلقائيًا

عند إضافة إدخالات، توسّع Go الجدول الأساسي وقد تعيد تجزئة المفاتيح إلى حاويات جديدة. يحدث ذلك تلقائيًا، لذلك لا تحتاج إلى إدارة السعة يدويًا.

أنواع المفاتيح المسموح بها

يجب أن تكون المفاتيح قابلة للمقارنة، أي من الأنواع التي يمكنك استخدامها مع ==. تعمل السلاسل النصية والأرقام والقيم المنطقية والبنى التي تتكون حقولها من أنواع قابلة للمقارنة. ولا يمكن استخدام المقاطع والخرائط كمفاتيح.

package main

import "fmt"

func main() {
	type Point struct{ X, Y int }
	m := map[Point]string{{1, 2}: "origin-ish"}
	fmt.Println(m[Point{1, 2}])
}

دلالات المرجع

قيمة الخريطة هي مرجع إلى البيانات الأساسية. يتيح تمرير خريطة إلى دالة للدالة تعديل الخريطة نفسها، من دون الحاجة إلى مؤشر.

package main

import "fmt"

func addOne(m map[string]int) {
	m["count"]++
}

func main() {
	m := map[string]int{"count": 0}
	addOne(m)
	fmt.Println(m)
}

تحقق سريع

ماذا يحدث إذا حاولت كتابة مفتاح في خريطة nil؟

مراجعة

الأساسيات الداخلية للخرائط:

  • الخرائط جداول تجزئة تحتوي على حاويات
  • متوسط تعقيد البحث والإدراج والحذف هو O(1)
  • يجب أن تكون المفاتيح قابلة للمقارنة، وتؤدي الكتابة إلى خرائط nil إلى panic
  • للخرائط دلالات مرجعية

الأسئلة الشائعة

هل درس «البنية الداخلية للخرائط» مجاني؟

نعم — نص درس «البنية الداخلية للخرائط» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Go Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Go Academy 4 دروس في المجموع.

ماذا ستتعلم في «البنية الداخلية للخرائط»؟

افهم كيفية تخزين الخرائط للبيانات تتمرن على Go Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Go Academy؟

لا تُشترط خبرة سابقة. Go Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «البنية الداخلية للخرائط»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Go Academy هذا؟

نعم. كل درس في Go Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. البنية الداخلية للخرائط
  2. التحقّق من الوجود
  3. الخرائط بوصفها مجموعات
  4. التكرار والترتيب
← العودة إلى Go Academy