Menu
Coddy logo textTech

יצירת קבוצה

חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 32 מתוך 68.

עכשיו, כשאתה מבין את הרעיון שמאחורי ניב ה־set של Go, הגיע הזמן ליישם אותו וליצור את קבוצת האיברים הראשונה שלך. התהליך פשוט ופועל לפי אותם דפוסים שכבר למדת עם מפות.

כדי ליצור קבוצה ב-Go, מצהירים על משתנה באמצעות התבנית map[T]struct{}, כאשר T הוא סוג האיברים שרוצים לאחסן. כך יוצרים קבוצה לאחסון שמות צבעים ייחודיים:

colors := make(map[string]struct{})

אפשר גם לאתחל קבוצה עם ערכי התחלה באמצעות תחביר של מילולית map:

colors := map[string]struct{}{
    "red":   {},
    "blue":  {},
    "green": {},
}

שימו לב שכל ערך הוא ליטרל של מבנה ריק {}. כך נוצר ערך האפס של struct{}, שאינו תופס מקום בזיכרון ובכל זאת מאפשר למפתח להתקיים במפה.

היתרון בגישה הזו הוא שהיא מנצלת את תשתית המפות הקיימת של Go ובו בזמן מספקת סמנטיקה אמיתית של קבוצה — כל שם צבע יכול להופיע פעם אחת בלבד, וזמני החיפוש מהירים, בדיוק כמו במפות רגילות.

challenge icon

אתגר

קל

צרו מעקב אחר העדפות לשפות תכנות, שמדגים את דפוס ה־set של Go לאחסון פריטים ייחודיים. האתגר הזה מראה כיצד להשתמש בתבנית map[string]struct{} כדי לעקוב אחר שפות תכנות בלי כפילויות.

תקבלו שתי קלטים:

  • מחרוזת שמייצגת את מספר השפות לעיבוד (לדוגמה, "6")
  • מחרוזת שמכילה שפות תכנות מופרדות בפסיקים (לדוגמה, "Go,Python,JavaScript,Go,Java,Python,C++,JavaScript")

המשימה שלכם היא:

  1. ליצור קבוצה באמצעות דפוס ה־set של Go, map[string]struct{}, כדי לאחסן שפות תכנות ייחודיות
  2. לנתח את מחרוזת הקלט באמצעות פיצול שלה לפי פסיקים, כדי לקבל שמות של שפות בודדות
  3. להוסיף כל שפה לקבוצה שלכם באמצעות ערך מסוג struct ריק, {}
  4. להציג את תוצאות העיבוד באמצעות הדפסה של כל שפה כשהיא מופיעה:
    • אם השפה חדשה בקבוצה: "Added: [language]"
    • אם השפה כבר קיימת בקבוצה: "Already exists: [language]"
  5. לאחר עיבוד כל השפות, להציג סיכום:
    • "Total languages processed: [total_count]"
    • "Unique languages: [unique_count]"
  6. לבסוף, לרשום את כל השפות הייחודיות בקבוצה:
    • כותרת: "Programming languages in set:"
    • כל שפה בשורה נפרדת: "- [language]"

השתמשו בחבילה strings כדי לפצל את מחרוזת הקלט, ובחבילה strconv כדי להמיר את מחרוזת הספירה למספר שלם. כדי לבדוק אם שפה כבר קיימת בקבוצה לפני שמוסיפים אותה, השתמשו בדפוס comma ok: _, exists := languageSet[language]. האתגר הזה מדגים כיצד דפוס ה־set של Go מספק דרך יעילה לעקוב אחר פריטים ייחודיים ולמנוע כפילויות בנתונים שלכם.

נסו בעצמכם

package main

import (
	"fmt"
	"sort"
	"strconv"
	"strings"
)

func main() {
	// קראו את הקלט
	var countStr string
	var languagesStr string
	fmt.Scanln(&countStr)
	fmt.Scanln(&languagesStr)
	
	// המירו את מחרוזת הכמות למספר שלם (לא נדרש לאתגר הזה)
	_, _ = strconv.Atoi(countStr)
	
	// פצלו את מחרוזת השפות לפי פסיקים
	languages := strings.Split(languagesStr, ",")
	
	// צרו קבוצה באמצעות התבנית map[string]struct{}
	languageSet := make(map[string]struct{})
	
	// TODO: כתבו את הקוד שלכם למטה
	// עבדו כל שפה ובדקו אם היא קיימת בקבוצה
	// השתמשו בתבנית comma ok: _, exists := languageSet[language]
	// הדפיסו "Added: [language]" או "Already exists: [language]"
	// הוסיפו שפות לקבוצה באמצעות ערך מילולי של struct ריק {}
	
	// הדפיסו מידע מסכם
	// הדפיסו את מספר השפות הכולל שעובדו ואת מספר השפות הייחודיות
	
	// הדפיסו את כל השפות הייחודיות בקבוצה
	fmt.Println("Programming languages in set:")
	// המר את ה-map ל-slice ומיין אותו כדי לקבל פלט עקבי
	// הצג כל שפה בפורמט "- [language]"
}
quiz iconבחנו את עצמכם

השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.

כל השיעורים ביחידה לוגיקה וזרימת התוכנית

תרגלו בעצמכם: קומפיילר Go אונליין