Menu
CoddyTech

تواقيع الفهارس

جزء من قسم مقدمة إلى Luau في رحلة Lua على Coddy. الدرس 78 من 80.

تعرفت على أنواع الخرائط مثل {[string]: number} في فصل الجداول: توقيع الفهرس: يربط أي مفتاح نصي بقيمة عددية. وتكون مفيدة عندما لا تكون المفاتيح معروفة أثناء كتابة الشيفرة: العدادات، والإعدادات، وذاكرات التخزين المؤقت، والنتائج؛ أي شيء يُنشأ أثناء التشغيل.

type Counts = {[string]: number}

local counts: Counts = {}
counts["potion"] = 3   -- يُسمح بأي مفتاح من نوع string
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

التحدي

سهل

احتفظ بنتائج اللاعبين الذين لا تعرف أسماءهم مسبقًا.

  1. اكتب type Scores = {[string]: number} وأنشئ local scores: Scores = {}.
  2. أضف النقاط: scores["mia"] = (scores["mia"] or 0) + 5، ثم افعل الشيء نفسه مع "leo" باستخدام 3.
  3. اطبع scores["mia"] وscores["leo"] وscores["zed"].

اضغط على تشغيل الكود: سيعرض الناتج 5 و3 وnil.

جرّب بنفسك

-- 1) عرّف type Scores = {[string]: number}، ثم local scores: Scores = {}
-- 2) أضف 5 نقاط إلى "mia" و3 نقاط إلى "leo"
-- 3) اطبع mia وleo وzed

جميع دروس مقدمة إلى Luau

تدرّب بنفسك: مترجم Luau عبر الإنترنت