table.sort()
חלק מהיחידה לוגיקה וזרימת התוכנית במסלול ה-Lua של Coddy. שיעור 7 מתוך 54.
בעבודה עם טבלאות בסגנון רשימה, לעיתים קרובות יהיה עליך לארגן את הנתונים בסדר מסוים. Lua מספקת את הפונקציה table.sort() כדי לסדר את איברי הטבלה במקומם, כלומר היא משנה את הטבלה המקורית במקום ליצור טבלה חדשה.
התחביר הבסיסי פשוט:
table.sort(myTable)כברירת מחדל, table.sort() מסדרת מספרים בסדר עולה ומחרוזות לפי סדר האלפבית. הנה דוגמה עם רשימת ניקוד:
local scores = {85, 42, 91, 67, 55}
table.sort(scores)
-- scores היא כעת {42, 55, 67, 85, 91}במחרוזות, המיון מתבצע לפי סדר אלפביתי:
local names = {"Charlie", "Alice", "Bob"}
table.sort(names)
-- names מכיל עכשיו {"Alice", "Bob", "Charlie"}לפעמים המיון כברירת מחדל אינו מה שאתה צריך. אפשר לספק פונקציית השוואה מותאמת אישית כארגומנט שני כדי לקבוע איך משווים בין איברים. הפונקציה מקבלת שני איברים ומחזירה true אם הראשון אמור להופיע לפני השני:
local numbers = {5, 2, 8, 1}
table.sort(numbers, function(a, b)
return a > b -- מיון בסדר יורד
end)
-- numbers מכיל כעת {8, 5, 2, 1}הפונקציה table.sort() עובדת רק עם טבלאות בסגנון רשימה שיש להן מפתחות שלמים עוקבים שמתחילים ב־1. זהו כלי רב־עוצמה לארגון נתונים לפני הצגתם או עיבודם בסדר מסוים.
אתגר
קלכתבו פונקציה sortScoresDescending שמקבלת טבלה scores ומחזירה מחרוזת מעוצבת של הציונים הממוינים בסדר יורד.
השתמשו ב-table.sort() עם פונקציית השוואה מותאמת אישית כדי לסדר את הציונים מהגבוה לנמוך, ולאחר מכן השתמשו ב-table.concat() כדי לחבר אותם למחרוזת אחת, עם פסיקים כמפרידים.
פרמטרים:
scores(table): טבלה בסגנון רשימה המכילה ציונים מספריים
ערך מוחזר: מחרוזת עם ציונים ממוינים מהגבוה לנמוך, עם פסיקים כמפרידים. פורמט: 95,87,76,54
נסו בעצמכם
function sortScoresDescending(scores)
-- כתבו כאן קוד
end
השיעור הזה כולל חידון קצר. התחילו את השיעור כדי לענות עליו ולעקוב אחרי ההתקדמות.
כל השיעורים ביחידה לוגיקה וזרימת התוכנית
1איטרציה מתקדמת בטבלאות
איטרציה באמצעות pairs()איטרציה באמצעות ipairs()pairs() לעומת ipairs()סיכום – גיליון דמות2פונקציות נוספות של ספריית הטבלאות
table.concat()בניית טבלה ו־unpack()table.sort()מיון מותאם אישית באמצעות פונקציותסיכום – לוח שיאיםתרגלו בעצמכם: קומפיילר Lua אונליין