Menu
Coddy logo textTech
flag Ar iconالعربيةdown icon

توقيعات الفهارس (Index Signatures)

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

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

type Counts = {[string]: number}

local counts: Counts = {}
counts["potion"] = 3   -- يُسمح بأي مفتاح نصي
counts["sword"] = 1
counts["potion"] += 1  -- يتم التحقق من القيم كأرقام

هناك حقيقتان أثناء وقت التشغيل مهمتان عند العمل مع الخرائط. أولًا، تؤدي قراءة مفتاح لم يسبق تعيينه إلى إرجاع nil: يعالج نمط العدّ الكلاسيكي ذلك باستخدام or، إذ يحوّل القيمة "missing" إلى 0:

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

ثانيًا، تكرّر pairs() مفاتيح الخريطة بترتيب غير مضمون: قد تؤدي إعادة تشغيل البرنامج نفسه مرتين إلى زيارة المفاتيح بطرق مختلفة. عندما يجب أن يكون الناتج قابلًا للتنبؤ، اجمع المفاتيح في array، ثم نفّذ table.sort عليها، وكرّر على array المرتّبة بدلًا من ذلك:

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

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