Menu
Coddy logo textTech

חתימות אינדקס

חלק מהיחידה מבוא ל-Luau במסלול ה-Lua של Coddy. שיעור 72 מתוך 73.

כבר פגשת טיפוסי מפה כמו {[string]: number} בפרק הטבלאות: חתימת אינדקס: כל מפתח מסוג מחרוזת ממפה לערך מספרי. הם שימושיים במיוחד כשהמפתחות אינם ידועים בזמן כתיבת הקוד: מונים, הגדרות, מטמונים, ניקוד — כל דבר שנבנה בזמן הריצה.

type Counts = {[string]: number}

local counts: Counts = {}
counts["potion"] = 3   -- מותר להשתמש בכל מחרוזת כמפתח
counts["sword"] = 1
counts["potion"] += 1  -- הערכים נבדקים כמספרים

חשוב לזכור שתי עובדות על זמן הריצה כשעובדים עם מפות. ראשית, קריאה של מפתח שמעולם לא הוגדר מחזירה nil: דפוס הספירה הקלאסי מטפל בכך בעזרת or, וממיר ערך "חסר" ל־0:

counts[item] = (counts[item] or 0) + 1

שנית, pairs() עובר על מפתחות של מפה בסדר שאינו מובטח: הפעלה של אותה תוכנית פעמיים יכולה לעבור על המפתחות בסדר שונה. בכל פעם שהפלט חייב להיות צפוי, אסוף את המפתחות במערך, מיין אותם באמצעות table.sort, ועבור במקום זאת על המערך הממוין:

local keys: {string} = {}
for key in pairs(counts) do
    table.insert(keys, key)
end
table.sort(keys)
for _, key in ipairs(keys) do
    print(`{key}: {counts[key]}`)
end
challenge icon

אתגר

קל

ספרו את הפריטים שנפלו באמצעות מפה מטיפוס מוגדר.

  • הכריזו על type Counts = {[string]: number}.
  • כתבו countItems(items: {string}): Counts שבונה מפה חדשה מסוג Counts וסופרת כמה פעמים כל מחרוזת מופיעה (השתמשו בתבנית (counts[item] or 0) + 1).
  • צרו local loot: {string} = {"potion", "sword", "potion", "shield", "potion", "sword"} וספרו את הפריטים שבה.
  • הדפיסו שורה אחת בפורמט [name]: [count] עבור כל פריט ייחודי, בסדר אלפביתי: אספו את המפתחות, הפעילו עליהם table.sort, ואז הדפיסו.

הפלט הצפוי:

potion: 3
shield: 1
sword: 2

נסו בעצמכם

-- כתבו כאן קוד
-- 1) type Counts = {[string]: number}
-- 2) הגדירו את countItems(items: {string}): Counts באמצעות (counts[item] or 0) + 1
-- 3) ספרו את הפריטים במערך loot מהמשימה
-- 4) אספו את המפתחות, מיינו אותם באמצעות table.sort, והדפיסו שורות בפורמט `{name}: {count}`
quiz iconבחנו את עצמכם

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

כל השיעורים ביחידה מבוא ל-Luau

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