מיון מותאם אישית באמצעות פונקציות
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Lua של Coddy. שיעור 8 מתוך 54.
אף ש־table.sort() פועלת היטב עבור רשימות פשוטות של מספרים או מחרוזות, נתונים מהעולם האמיתי מורכבים לעיתים קרובות יותר. ייתכן שיש לך טבלה של רשומות שחקנים, פריטי מלאי או תוצאות משחק, שבה כל רשומה היא בעצמה טבלה עם כמה שדות.
כדי למיין את המבנים המורכבים האלה, צריך לומר ל־table.sort() בדיוק איך להשוות בין שתי רשומות. כאן פונקציות השוואה מותאמות אישית נעשות חיוניות. פונקציית השוואה מקבלת שני איברים ומחזירה true אם הראשון צריך להופיע לפני השני בסדר הממוין.
הנה דוגמה עם טבלה של רשומות שחקנים:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)לאחר המיון, טבלת השחקנים תהיה מסודרת לפי ניקוד בסדר יורד, כשבוב במקום הראשון (200), צ'רלי במקום השני (175) ואליס במקום השלישי (150). פונקציית ההשוואה ניגשת לשדה score של כל טבלת שחקן כדי לקבוע את הסדר שלהן.
אפשר למיין לפי כל שדה שרוצים: שמות בסדר אלפביתי, רמות בסדר מספרי, או אפילו לשלב כמה קריטריונים.
נסו בעצמכם
השיעור הזה לא כולל אתגר קוד.
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1איטרציה מתקדמת בטבלאות
איטרציה באמצעות pairs()איטרציה באמצעות ipairs()pairs() לעומת ipairs()סיכום – גיליון דמות2פונקציות נוספות של ספריית הטבלאות
table.concat()בניית טבלה ו־unpack()table.sort()מיון מותאם אישית באמצעות פונקציותסיכום – לוח שיאיםתרגלו בעצמכם: קומפיילר Lua אונליין