מיזוג מילונים
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-GDScript של Coddy. שיעור 21 מתוך 78.
merge() מוסיפה כל זוג מתוך מילון אחר למילון שעליו קוראים לה. מפתחות שנמצאים רק במילון האחר מתווספים בסוף:
var settings := {"volume": 5, "difficulty": "normal"}
var saved := {"difficulty": "hard", "subtitles": true}
settings.merge(saved)
print(settings){ "volume": 5, "difficulty": "normal", "subtitles": true }"difficulty" מופיע בשני המילונים, ו־merge() השאיר את הערך שכבר היה ל־settings: כברירת מחדל, מפתחות קיימים אינם מוחלפים. העבר את true כארגומנט השני כדי שהמילון השני ינצח:
var options := {"volume": 5, "difficulty": "normal"}
options.merge(saved, true)
print(options["difficulty"]) # hardmerge() משנה את המילון עצמו ולא מחזירה דבר, לכן var result := a.merge(b) היא שגיאה. כדי לשמור על שני המילונים כפי שהם, השתמשו ב-merged(). היא מקבלת את אותם ארגומנטים ומחזירה מילון חדש:
var defaults := {"volume": 5, "difficulty": "normal"}
var choice := {"difficulty": "hard"}
var final_settings := defaults.merged(choice, true)
print(final_settings) # { "volume": 5, "difficulty": "hard" }
print(defaults) # { "volume": 5, "difficulty": "normal" }כאשר מפתח מופיע בשני המילונים ורוצים לשלב את הערכים, למשל לחבר שני סכומים, כתבו את הלולאה בעצמכם:
var bag := {"gold": 10, "gems": 1}
var loot := {"gold": 5, "keys": 2}
for key in loot:
bag[key] = bag.get(key, 0) + loot[key]
print(bag) # { "gold": 15, "gems": 1, "keys": 2 }אתגר
קלעדכון משחק הוסיף הגדרות חדשות. ההגדרות השמורות של השחקן נקראות משורת קלט אחת, שנכתבת כזוגות key=value המופרדים בפסיקים (השורה יכולה להיות ריקה). הקוד הנתון שומר אותן במילון saved.
השלימו את ההגדרות החסרות בשמירה: הוסיפו ל-saved כל זוג מתוך defaults שהמפתח שלו עדיין לא נמצא בו, בלי לשנות את הערכים שהשחקן בחר ובלי לשנות את defaults. לאחר מכן הדפיסו את saved, והדפיסו את defaults בשורה הבאה.
עבור הקלט difficulty=hard,volume=8, הפלט הוא:
{ "difficulty": "hard", "volume": "8", "subtitles": "off", "language": "en" }
{ "difficulty": "normal", "volume": "5", "subtitles": "off", "language": "en" }נסו בעצמכם
extends Node
func _ready():
var defaults := {"difficulty": "normal", "volume": "5", "subtitles": "off", "language": "en"}
var saved := {}
for pair in OS.read_string_from_stdin().split(",", false):
var parts := pair.split("=")
saved[parts[0]] = parts[1]
# הוסף את ערכי ברירת המחדל החסרים ל-saved, ואז הדפס את שני המילונים
pass
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
2קבלת החלטות מתקדמת
התאמה עם משתניםתנאי סף להתאמהתבניות מערכיםתבניות מילוניםבדיקות חברותסיכום – מנתח פקודות5אפליקציית ספר אנשי קשר
הצגת התפריטהוספת איש קשר8מנהל רשומות תלמידים
סקירת הפרויקטהוספת תלמידתרגלו בעצמכם: קומפיילר GDScript אונליין