Menu
CoddyTech

מיזוג מילונים

חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-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"]) # hard

merge() משנה את המילון עצמו ולא מחזירה דבר, לכן 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 }
challenge icon

אתגר

קל

עדכון משחק הוסיף הגדרות חדשות. ההגדרות השמורות של השחקן נקראות משורת קלט אחת, שנכתבת כזוגות 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
quiz iconבחנו את עצמכם

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

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

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