الخرائط بوصفها مجموعات
استخدم الخرائط للقيم الفريدة
الخرائط بوصفها مجموعات درس مجاني في Go Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Go Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Go Academy 4 دروس في المجموع.
لا يوجد نوع Set في Go
لا تحتوي Go على نوع set مضمن. والطريقة الاصطلاحية لتمثيل مجموعة من القيم الفريدة هي استخدام خريطة تكون عناصر المجموعة مفاتيحها.
خريطة من القيم المنطقية
إحدى الطرق هي: map[string]bool. ويعني وجود المفتاح، مع كون قيمته true، أن العنصر موجود في المجموعة.
package main
import "fmt"
func main() {
set := map[string]bool{}
set["apple"] = true
set["banana"] = true
fmt.Println(set)
}التحقق من العضوية
استخدم Comma-Ok أو اقرأ القيمة المنطقية مباشرة لاختبار العضوية.
package main
import "fmt"
func main() {
set := map[string]bool{"apple": true}
fmt.Println(set["apple"])
fmt.Println(set["cherry"])
}خرائط من البنى الفارغة
تستخدم المجموعة الأكثر كفاءة من حيث الذاكرة map[string]struct{}. فالبنية الفارغة تشغل صفر بايت، ولذلك لا تخزن سوى المفاتيح.
package main
import "fmt"
func main() {
set := map[string]struct{}{}
set["x"] = struct{}{}
_, ok := set["x"]
fmt.Println("x in set:", ok)
}لماذا نستخدم البنية الفارغة
لا تهم القيمة في المجموعة؛ المهم هو المفتاح فقط. تشير struct{}{} إلى أنك تنوي تجاهل القيم، كما أنها لا تستخدم ذاكرة إضافية لكل إدخال.
إضافة العناصر
لا تؤثر إضافة مفتاح مكرر، ولذلك تفرض المجموعة التفرد تلقائيًا.
package main
import "fmt"
func main() {
set := map[string]struct{}{}
set["a"] = struct{}{}
set["a"] = struct{}{}
fmt.Println("size:", len(set))
}إزالة التكرارات
من الاستخدامات الشائعة إزالة التكرارات من مقطع. أضف كل عنصر إلى مجموعة، ثم اقرأ المفاتيح الفريدة.
package main
import "fmt"
func main() {
input := []string{"a", "b", "a", "c", "b"}
set := map[string]struct{}{}
for _, v := range input {
set[v] = struct{}{}
}
fmt.Println("unique count:", len(set))
}إنشاء مقطع فريد
ادمج المجموعة مع مقطع ناتج للحفاظ على ترتيب الظهور الأول مع حذف التكرارات.
package main
import "fmt"
func main() {
input := []int{1, 2, 1, 3, 2}
seen := map[int]struct{}{}
result := []int{}
for _, v := range input {
if _, ok := seen[v]; !ok {
seen[v] = struct{}{}
result = append(result, v)
}
}
fmt.Println(result)
}تقاطع المجموعات
للعثور على العناصر المشتركة بين مجموعتين، كرر على إحداهما واحتفظ بالعناصر الموجودة في الأخرى.
package main
import "fmt"
func main() {
a := map[int]struct{}{1: {}, 2: {}, 3: {}}
b := map[int]struct{}{2: {}, 3: {}, 4: {}}
for k := range a {
if _, ok := b[k]; ok {
fmt.Println("common:", k)
}
}
}الإزالة من مجموعة
استخدم delete لإزالة عنصر من المجموعة.
package main
import "fmt"
func main() {
set := map[string]struct{}{"a": {}, "b": {}}
delete(set, "a")
_, ok := set["a"]
fmt.Println("a in set:", ok)
}اختيار bool أم struct{}
كلاهما صالح. استخدم map[T]bool عندما تساعد سهولة قراءة set[x] كقيمة منطقية. واستخدم map[T]struct{} عندما تريد الإشارة إلى عدم أهمية القيمة وتوفير الذاكرة في المجموعات الكبيرة.
تحقق سريع
لماذا يُفضَّل غالبًا استخدام map[string]struct{} بدلًا من map[string]bool للمجموعات؟
مراجعة
استخدام الخرائط كمجموعات:
- لا تحتوي Go على نوع set؛ استخدم خريطة تكون عناصر المجموعة مفاتيحها
map[T]boolأوmap[T]struct{}- مفيدة جدًا لإزالة التكرارات واختبارات العضوية
الأسئلة الشائعة
هل درس «الخرائط بوصفها مجموعات» مجاني؟
نعم — نص درس «الخرائط بوصفها مجموعات» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 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 يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- البنية الداخلية للخرائط
- التحقّق من الوجود
- الخرائط بوصفها مجموعات
- التكرار والترتيب