Menu
Coddy logo textTech

מעבר על איברי קבוצה

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

עכשיו, כשאתה יודע להוסיף, לבדוק ולהסיר איברים מהקבוצה שלך, הגיע הזמן ללמוד איך לעבור על כל האיברים. מכיוון שקבוצת ה-Go שלך מבוססת על מפה, תוכל להשתמש בלולאת for...range המוכרת כדי לגשת לכל איבר.

כדי לעבור על קבוצה, משתמשים באותו תחביר כמו למעבר על מפה, אבל מתעניינים רק במפתחות:

for color := range colors {
    fmt.Println(color)
}

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

אפשר גם להשתמש בצורה עם שני משתנים, אם מעדיפים לציין במפורש שמתעלמים מהערך:

for color, _ := range colors {
    fmt.Println(color)
}

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

challenge icon

אתגר

קל

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

תקבלו שתי כניסות:

  • מחרוזת המכילה שירי רוק המופרדים בפסיקים (למשל, "Bohemian Rhapsody,Stairway to Heaven,Hotel California,Sweet Child O Mine")
  • מחרוזת המכילה שירי פופ המופרדים בפסיקים (למשל, "Shape of You,Blinding Lights,Watermelon Sugar,Levitating")

עליכם:

  1. ליצור שתי קבוצות באמצעות האידיום של Go map[string]struct{} כדי לאחסן את שירי הרוק ואת שירי הפופ בנפרד
  2. לנתח את שתי מחרוזות הקלט על ידי פיצול שלהן לפי פסיקים, כדי לקבל כותרות של שירים בודדים
  3. להוסיף כל שיר לקבוצה המתאימה באמצעות הערך של מבנה ריק {}
  4. להציג את הניתוח של רשימת ההשמעה של הרוק:
    • כותרת: "Rock Playlist Analysis:"
    • מספר: "Total rock songs: [count]"
    • כותרת השירים: "Songs in rock playlist:"
    • כל שיר בשורה נפרדת: "♪ [song_title]"
  5. להציג את הניתוח של רשימת ההשמעה של הפופ:
    • כותרת: "Pop Playlist Analysis:"
    • מספר: "Total pop songs: [count]"
    • כותרת השירים: "Songs in pop playlist:"
    • כל שיר בשורה נפרדת: "♪ [song_title]"
  6. ליצור רשימת השמעה משולבת על ידי מיזוג שתי הקבוצות לקבוצה חדשה
  7. להציג את הניתוח של רשימת ההשמעה המשולבת:
    • כותרת: "Combined Playlist Analysis:"
    • מספר: "Total unique songs: [count]"
    • כותרת השירים: "All songs in combined playlist:"
    • כל שיר בשורה נפרדת: "♫ [song_title]"
  8. לבסוף, להציג סיכום:
    • "Playlist Summary:"
    • "Rock songs: [rock_count]"
    • "Pop songs: [pop_count]"
    • "Combined unique songs: [combined_count]"

השתמשו בחבילה strings כדי לפצל את מחרוזות הקלט לפי פסיקים. כדי לעבור על כל קבוצה, השתמשו בלולאת for...range עם משתנה יחיד, כדי לגשת למפתחות בלבד (כותרות השירים). האתגר הזה מדגים כיצד מעבר על קבוצות של Go מאפשר לבדוק את כל האיברים באוסף, ולכן הוא מתאים במיוחד למשימות של ניתוח ודיווח.

נסו בעצמכם

package main

import (
	"bufio"
	"fmt"
	"os"
	"sort"
	"strings"
)

func main() {
	// קראו שורות שלמות באמצעות bufio.Scanner (תומך בשמות שירים הכוללים רווחים)
	scanner := bufio.NewScanner(os.Stdin)

	scanner.Scan()
	rockSongs := scanner.Text()
	scanner.Scan()
	popSongs := scanner.Text()

	// צרו קבוצות באמצעות התבנית המקובלת ב-Go‏ map[string]struct{}
	rockSet := make(map[string]struct{})
	popSet := make(map[string]struct{})

	// נתחו את מחרוזות הקלט ומלאו את הקבוצות
	rockList := strings.Split(rockSongs, ",")
	popList := strings.Split(popSongs, ",")

	// TODO: כתבו את הקוד שלכם למטה
	// הוסיפו את השירים לקבוצות המתאימות להם
	// הציגו ניתוח של רשימת השמעה של רוק (מיינו את השירים כדי להבטיח פלט עקבי)
	// הציגו ניתוח של רשימת השמעה של פופ (מיינו את השירים כדי להבטיח פלט עקבי)
	// צרו והציגו ניתוח של רשימת השמעה משולבת (מיינו את השירים כדי להבטיח פלט עקבי)
	// הציגו סיכום של רשימות ההשמעה
	// זכרו: המירו את המפתחות של map ל-slice, מיינו, ואז עברו עליהם לפי הסדר כדי להבטיח סדר עקבי

	_ = rockSet
	_ = popSet
	_ = rockList
	_ = popList
	_ = fmt.Sprintf
	_ = sort.Strings
}
quiz iconבחנו את עצמכם

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

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

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