فرز مخصص باستخدام الدوال
جزء من قسم Logic & Flow في رحلة Lua على Coddy — الدرس 8 من 54.
بينما يعمل table.sort() بشكل رائع مع القوائم البسيطة من الأرقام أو السلاسل النصية، إلا أن بيانات العالم الحقيقي غالباً ما تكون أكثر تعقيداً. قد يكون لديك جدول لسجلات اللاعبين، أو عناصر المخزون، أو نتائج الألعاب حيث يكون كل إدخال في حد ذاته جدولاً يحتوي على حقول متعددة.
لفرز هذه الهياكل المعقدة، تحتاج إلى إخبار table.sort() بالضبط بكيفية مقارنة مدخلين. هنا تصبح وظائف المقارنة المخصصة ضرورية. تأخذ وظيفة المقارنة عنصرين وتعيد true إذا كان يجب أن يأتي الأول قبل الثاني في الترتيب المفرز.
إليك مثال مع جدول لسجلات اللاعبين:
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)بعد عملية الفرز، سيتم ترتيب جدول players حسب score بترتيب تنازلي، بحيث يكون Bob في المركز الأول (200)، وCharlie في المركز الثاني (175)، وAlice في المركز الثالث (150). تقوم دالة المقارنة بالوصول إلى حقل score الخاص بكل جدول لاعب لتحديد ترتيبهم.
يمكنك الفرز حسب أي حقل تريده—الأسماء أبجديًا، أو المستويات رقميًا، أو حتى الجمع بين معايير متعددة.
ورقة مرجعية
لفرز الجداول ذات هياكل البيانات المعقدة، استخدم دالة مقارنة مخصصة مع table.sort(). تأخذ دالة المقارنة عنصرين وتعيد true إذا كان يجب أن يأتي العنصر الأول قبل الثاني.
local players = {
{name = "Alice", score = 150},
{name = "Bob", score = 200},
{name = "Charlie", score = 175}
}
table.sort(players, function(a, b)
return a.score > b.score
end)يقوم هذا بفرز اللاعبين حسب النتيجة بترتيب تنازلي. يمكنك الفرز حسب أي حقل في هيكل الجدول.
جرّب بنفسك
لا يتضمّن هذا الدرس تحدّيًا برمجيًا.
يتضمن هذا الدرس اختبارًا قصيرًا. ابدأ الدرس للإجابة عليه وتتبّع تقدمك.
جميع دروس Logic & Flow
1التكرار المتقدم عبر الجداول
التكرار باستخدام pairs()التكرار باستخدام ipairs()pairs() مقابل ipairs()مراجعة - ورقة الشخصية2المزيد من دوال مكتبة Table
table.concat()إنشاء الجداول و unpack()table.sort()فرز مخصص باستخدام الدوالمراجعة - لوحة أعلى النتائج