מיון מותאם אישית
חלק מהיחידה לוגיקה וזרימת תוכנית במסלול ה-GDScript של Coddy. שיעור 51 מתוך 78.
sort() ממיינת מערך בסדר עולה ומשנה את המערך עצמו. מספרים מסודרים מהקטן לגדול, ומחרוזות לפי אותו סדר כמו min(), אותיות גדולות תחילה. לאחר מכן reverse() מסדרת בסדר יורד:
var scores := [40, 95, 12, 70]
scores.sort()
print(scores) # [12, 40, 70, 95]
scores.reverse()
print(scores) # [95, 70, 40, 12]לכל סדר אחר, קראו ל־sort_custom() עם פונקציית השוואה. היא מקבלת שני איברים, a ו־b, ומחזירה true כאשר a חייב לבוא לפני b. העבירו את הפונקציה לפי שמה, ללא סוגריים:
func by_length(a: String, b: String) -> bool:
return a.length() < b.length()
func _ready():
var words := ["banana", "fig", "kiwi"]
words.sort_custom(by_length)
print(words) # ["fig", "kiwi", "banana"]ההשוואה יכולה לבדוק את האיברים מבפנים. זו מציבה ראשונה את המילון עם הערך הגבוה ביותר של "hp":
func by_hp(a: Dictionary, b: Dictionary) -> bool:
return a["hp"] > b["hp"]המיון אינו יציב: רכיבים שמשווים ביניהם כשווים יכולים להסתיים בכל סדר. כששוויון חשוב, יש להשוות שדה שני כאשר השדה הראשון שווה:
func by_score_then_name(a: Dictionary, b: Dictionary) -> bool:
if a["score"] != b["score"]:
return a["score"] > b["score"]
return a["player"] < b["player"]sort_custom() קיימת ב־Array, אך לא ב־PackedStringArray שמוחזר על ידי split(), לכן יש להמיר אותו תחילה באמצעות Array(...). תפגשו גם השוואה שנכתבת בתוך השורה, כמו ב־sort_custom(func(a, b): return a > b). הצורה הזאת היא למבדה, שנלמדת בפרק הפונקציות המתקדמות.
אתגר
קלהתוכנית קוראת שתי שורות: מספרים שלמים המופרדים ברווחים, ומילים המופרדות ברווחים. הקוד הנתון שומר אותם ב־numbers (מערך של מספרים שלמים) וב־words (מערך של מחרוזות).
- כתבו פונקציית השוואה
by_length(a: String, b: String) -> boolברמה העליונה. מילה קצרה יותר מופיעה קודם, ומילים באותו אורך מופיעות בסדר אלפביתי. - הדפיסו ארבע שורות: המספרים בסדר עולה, המספרים בסדר יורד, המילים בסדר אלפביתי (באמצעות
sort()), והמילים ממוינות באמצעותsort_custom(by_length).
עבור הקלטים 5 3 8 1 2 ו־elephant cat dolphin bee, הפלט הוא:
Ascending: [1, 2, 3, 5, 8]
Descending: [8, 5, 3, 2, 1]
Alphabetical: ["bee", "cat", "dolphin", "elephant"]
By length: ["bee", "cat", "dolphin", "elephant"]נסו בעצמכם
extends Node
# כתבו כאן את פונקציית ההשוואה by_length()
func _ready():
var numbers: Array[int] = []
for text in OS.read_string_from_stdin().split(" ", false):
numbers.append(int(text))
var words := Array(OS.read_string_from_stdin().split(" ", false))
# מיינו את המערכים והדפיסו את ארבע השורות
pass
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת תוכנית
2קבלת החלטות מתקדמת
התאמה עם משתניםתנאי סף להתאמהתבניות מערכיםתבניות מילוניםבדיקות חברותסיכום – מנתח פקודות5אפליקציית ספר אנשי קשר
הצגת התפריטהוספת איש קשר8מנהל רשומות תלמידים
סקירת הפרויקטהוספת תלמידתרגלו בעצמכם: קומפיילר GDScript אונליין