הסרה מקבוצה
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-GO של Coddy. שיעור 35 מתוך 68.
לפעמים צריך להסיר איברים מהקבוצה שלך, ו-Go מאפשרת לעשות זאת בקלות באמצעות הפונקציה המובנית delete(). מכיוון שהקבוצה שלך היא למעשה מפה מתחת לפני השטח, הסרת איבר פועלת בדיוק כמו הסרת מפתח ממפה.
כדי להסיר איבר מהקבוצה שלך, השתמש בפונקציה delete() עם הקבוצה שלך והאיבר שברצונך להסיר:
delete(colors, "red")הפונקציה delete() מקבלת שני פרמטרים: המפה (הקבוצה שלך) והמפתח שברצונך להסיר. אם הרכיב קיים בקבוצה, הוא יוסר. אם הרכיב לא קיים, הפונקציה לא עושה דבר - לא נזרקת שגיאה.
ההתנהגות הזאת מושלמת עבור קבוצות, כי לעיתים קרובות רוצים לוודא שאלמנט אינו נמצא בהן, בלי קשר לשאלה אם הוא היה שם מלכתחילה. הפעולה מהירה ויעילה, ושומרת על יתרונות הביצועים של מימוש המפה הבסיסי של Go.
אתגר
קלבנו מערכת לניהול ספרי ספרייה, שמסירה ספרים מאוספי ז׳אנרים שונים באמצעות האידיומה של קבוצות ב-Go. האתגר הזה מדגים איך להשתמש בפונקציה delete() כדי להסיר איברים מקבוצות תוך מעקב אחר תהליך ההסרה.
תקבלו שתי קלטים:
- מחרוזת המכילה ספרים באוסף הספרות הבדיונית, מופרדים בפסיקים (למשל,
"1984,Dune,Foundation,Neuromancer,Brave New World") - מחרוזת המכילה ספרים להסרה, מופרדים בפסיקים (למשל,
"Dune,Harry Potter,Foundation,Twilight,1984")
עליכם:
- ליצור קבוצה באמצעות האידיומה של Go
map[string]struct{}כדי לאחסן את ספרי הספרות הבדיונית - לנתח את מחרוזת הקלט הראשונה באמצעות פיצול שלה בפסיקים כדי לקבל את שמות הספרים בנפרד
- להוסיף כל ספר לקבוצה באמצעות ערך מסוג struct ריק
{} - לנתח את מחרוזת הקלט השנייה באמצעות פיצול שלה בפסיקים כדי לקבל את רשימת הספרים להסרה
- לכל ספר להסרה, לבדוק אם הוא נמצא בקבוצה באמצעות אידיומת comma ok
- להציג את תהליך ההסרה עבור כל ספר שמעבדים:
- אם הספר נמצא באוסף:
"Removing: [book_title]" - אם הספר לא נמצא באוסף:
"Not found: [book_title]"
- אם הספר נמצא באוסף:
- להשתמש בפונקציה
delete()כדי להסיר ספרים שנמצאים בקבוצה - לאחר עיבוד כל בקשות ההסרה, להציג סיכום:
"Initial collection size: [initial_count]""Removal requests: [requests_count]""Books successfully removed: [removed_count]""Books not found: [not_found_count]""Final collection size: [final_count]"
- לבסוף, לרשום את כל הספרים שנותרו באוסף:
- כותרת:
"Remaining books in fiction collection:" - כל ספר בשורה נפרדת:
"- [book_title]" - אם לא נותרו ספרים:
"- Collection is empty"
- כותרת:
השתמשו בחבילה strings כדי לפצל את מחרוזות הקלט בפסיקים. האתגר הזה מדגים כיצד הפונקציה delete() מסירה בבטחה איברים מקבוצת Go, בלי להעלות שגיאות גם כשמנסים להסיר איברים שאינם קיימים, ולכן היא מתאימה במיוחד לפעולות ניקוי.
נסו בעצמכם
package main
import (
"bufio"
"fmt"
"os"
"sort"
"strings"
)
func main() {
// קראו את הקלט באמצעות Scanner כדי לתמוך בשמות ספרים שמכילים רווחים
scanner := bufio.NewScanner(os.Stdin)
scanner.Scan()
fictionBooks := scanner.Text()
scanner.Scan()
booksToRemove := scanner.Text()
// פענחו את מחרוזות הקלט
fictionList := strings.Split(fictionBooks, ",")
removeList := strings.Split(booksToRemove, ",")
// TODO: כתבו את הקוד שלכם למטה
// 1. צרו קבוצה באמצעות map[string]struct{} לאחסון ספרי סיפורת
// 2. הוסיפו לקבוצה כל ספר מתוך fictionList
// 3. עברו על כל ספר ב-removeList ובדקו אם הוא קיים
// 4. הציגו את תהליך ההסרה והשתמשו בפונקציה delete()
// 5. הציגו נתונים סטטיסטיים מסכמים
// 6. הציגו רשימה של הספרים שנותרו באוסף
// זכרו למיין את הספרים שנותרו כדי להבטיח פלט עקבי
_ = sort.Strings // הסירו את השורה הזאת לאחר שתשתמשו ב-sort
_ = fmt.Println // הסירו את השורה הזאת לאחר שתשתמשו ב-fmt
}השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1בקרת זרימה מתקדמת
switch עם `fallthrough`יציאה מלולאות מקוננותהמשך לולאה מסוימתהצהרת `goto`סיכום – שליטה מתקדמת בלולאות4פרויקט: רשימת משימות פשוטה
הגדרת הפרויקטהוספת משימה2מבנים ושיטות
הגדרת שיטות במבניםמקבלי ערךמקבלי מצביעבחירת מקבליםשיטות לעומת פונקציותסיכום — התנהגות המבנים5מפות לעומק
מפות של Structsמצביעים כערכים במפהבדיקה אם מפות הן nilהשוואת מפותסיכום - מונה תדירות מילים8פרויקט: ניהול מלאי פשוט
סקירת הפרויקטבדיקת המלאי3ממשקים (הבסיס)
מהו ממשק?הגדרת ממשקמימוש ממשקשימוש בטיפוסי ממשקממשק ריקבדיקות טיפוסמתג טיפוסיםסיכום – צורות והתנהגויות6קבוצות בסגנון המקובל ב-Go
דפוס הקבוצה ב-Goיצירת קבוצההוספה לקבוצהבדיקת חברות בקבוצההסרה מקבוצהמעבר על איברי קבוצהסיכום – שמות משתמש ייחודייםתרגלו בעצמכם: קומפיילר Go אונליין