table.sort()
جزء من قسم Logic & Flow في رحلة 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(جدول): جدول بنمط قائمة يحتوي على درجات عددية
القيمة المرجعة: سلسلة نصية تحتوي على الدرجات مرتبة من الأعلى إلى الأقل، مفصولة بفواصل. التنسيق: 95,87,76,54
ورقة مرجعية
تقوم الدالة table.sort() بترتيب عناصر الجدول في مكانها، مما يؤدي إلى تعديل الجدول الأصلي:
table.sort(myTable)بشكل افتراضي، تقوم بترتيب الأرقام ترتيباً تصاعدياً والسلاسل النصية أبجدياً:
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() فقط مع الجداول التي على نمط القائمة (list-style) والتي تحتوي على مفاتيح صحيحة متسلسلة تبدأ من 1.
جرّب بنفسك
function sortScoresDescending(scores)
-- اكتب الكود هنا
end
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1التكرار المتقدم عبر الجداول
التكرار باستخدام pairs()التكرار باستخدام ipairs()pairs() مقابل ipairs()مراجعة - ورقة الشخصية2المزيد من دوال مكتبة Table
table.concat()إنشاء الجداول و unpack()table.sort()فرز مخصص باستخدام الدوالمراجعة - لوحة أعلى النتائج