الدرس 3 من 10
دوال مكتبة table
- 13 دقيقة
- 5 فحوص
- 3 تلميحات
- إلى المطلوب
هدف الدرس
الإضافة والحذف والوصل والترتيب
الشرح
في مكتبة table كل ما تحتاجه لإدارة قائمة، فالدالة table.insert(t, pos, v) تضع القيمة في الموضع pos وتزيح ما بعده خطوة، والدالة table.remove(t, pos) تحذف العنصر من موضعه وتُرجعه ثم تسدّ مكانه بما بعده، وإن لم تذكر pos عملت الاثنتان على آخر القائمة.
أمّا table.concat(t, ", ") فتصل العناصر في نصّ واحد، ولا تقبل إلا النصوص والأرقام، لذلك اجمع الأسماء في قائمة قبل أن تصلها. والدالة table.sort(t, less) ترتّب القائمة نفسها دون أن تنشئ قائمة جديدة، ودالة المقارنة less(a, b) تجيب عن سؤال واحد: هل يأتي a قبل b؟ ولا تحافظ table.sort على ترتيب العناصر المتساوية، فإن أردت ترتيبها ثابتًا فقارن بينها بمعيار ثانٍ.
والخطأ الشائع هنا أن تكتب >= في دالة المقارنة، فهي يجب أن تُرجع false للعنصرين المتساويين مهما كان ترتيبهما، بينما >= تُرجع true، فترمي table.sort الخطأ invalid order function for sorting أو تخلط الترتيب دون أن تخبرك. لذلك استعمل في المقارنة > أو < فقط.
المطلوب
لنظام الأدوار في القتال أصلح sortBySpeed(list) لتضع الأسرع أولًا، وترتّب المتساويين في speed حسب name تصاعديًّا، واكتب rush(list, unit) التي تضع الوحدة في أول الدور، وnextTurn(list) التي تحذف الوحدة الأولى وتُرجعها، وturnOrder(list) التي تُرجع الأسماء موصولة بـ ", ".
الفحوص
5 فحوص- الدالة sortBySpeed تقدّم الأسرع
- المتساويان في السرعة يُرتّبان بالاسم تصاعديًّا
- الدالة rush تضع الوحدة في أول الدور
- الدالة nextTurn تحذف الوحدة الأولى وتُرجعها
- الدالة turnOrder تصل الأسماء بفاصلة