0Pricing
Lua Academy · درس

‏table.sort مع دوال المقارنة

رتّب الجداول باستخدام دوال مقارنة مخصصة واستراتيجيات ترتيب مستقر

‏table.sort مع دوال المقارنة درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 1 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.

ما هي table.sort؟

ترتّب table.sort جدولًا في موضعه باستخدام دالة مقارنة. وإذا لم تُمرَّر دالة مقارنة، فإنها تستخدم المعامل <.

الترتيب التصاعدي الافتراضي

استدعِ table.sort(t) على جدول من الأرقام أو السلاسل لترتيبه تصاعديًا.

local nums = {5, 2, 8, 1, 9}
table.sort(nums)
for _, v in ipairs(nums) do print(v) end

دالة مقارنة مخصصة

مرّر الدالة function(a, b) return a < b end كوسيط ثانٍ.

local words = {"banana", "apple", "cherry"}
table.sort(words, function(a, b) return a < b end)
print(table.concat(words, ", "))

الترتيب التنازلي

اعكس المقارنة للترتيب تنازليًا.

local nums = {3, 1, 4, 1, 5, 9}
table.sort(nums, function(a, b) return a > b end)
print(table.concat(nums, ", "))

ترتيب الجداول حسب حقل

رتّب مصفوفة من السجلات حسب مفتاح حقل محدد.

local people = {
  {name="Charlie", age=30},
  {name="Alice", age=25},
  {name="Bob", age=28}
}
table.sort(people, function(a, b) return a.age < b.age end)
for _, p in ipairs(people) do print(p.name, p.age) end

الترتيب حسب مفاتيح متعددة

رتّب حسب مفتاح أساسي، ثم حسب مفتاح ثانوي عند التساوي.

table.sort(people, function(a, b)
  if a.age ~= b.age then return a.age < b.age end
  return a.name < b.name
end)

ملاحظة حول الاستقرار

لا تضمن table.sort في Lua استقرار الترتيب. فقد تظهر العناصر المتساوية بأي ترتيب. استخدم فاصلًا يعتمد على الفهرس للحصول على نتائج حتمية.

ترتيب السلاسل دون حساسية لحالة الأحرف

طبّع السلاسل باستخدام string.lower داخل دالة المقارنة.

table.sort(words, function(a, b)
  return a:lower() < b:lower()
end)

الترتيب باستخدام مستخرج مفتاح

خزّن المفاتيح المستخرجة مؤقتًا لتجنب تكرار الحساب أثناء الترتيب، باستخدام أسلوب تحويل Schwartzian.

local function sortBy(t, keyFn)
  local keyed = {}
  for i, v in ipairs(t) do keyed[i] = {val=v, key=keyFn(v)} end
  table.sort(keyed, function(a, b) return a.key < b.key end)
  for i, item in ipairs(keyed) do t[i] = item.val end
end

ترتيب الجداول الكبيرة

بالنسبة إلى الجداول الكبيرة جدًا، فكّر في استخدام تحويل Schwartzian: اربط كل عنصر بمفتاح ترتيبه، ثم رتّب العناصر، وبعد ذلك استخرجها. يتجنب ذلك إعادة حساب المفتاح عند كل مقارنة.

في الموضع مقابل النسخ

تعدّل table.sort الجدول الأصلي. لترتيب نسخة، استخدم أولًا table.move أو نفّذ تكرارًا لاستنساخ الجدول، ثم رتّب النسخة.

سؤال حول دالة المقارنة

أي دالة مقارنة ترتّب الأرقام ترتيبًا تصاعديًا؟

مراجعة: table.sort

ترتّب table.sort العناصر في موضعها، وتقبل دالة مقارنة اختيارية، ولا تضمن الاستقرار، وتُستخدم عادةً مع استراتيجيات تعتمد على الحقول أو على مفاتيح متعددة لتلبية متطلبات الترتيب المعقدة.

الأسئلة الشائعة

هل درس «‏table.sort مع دوال المقارنة» مجاني؟

نعم — نص درس «‏table.sort مع دوال المقارنة» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.

ماذا ستتعلم في «‏table.sort مع دوال المقارنة»؟

رتّب الجداول باستخدام دوال مقارنة مخصصة واستراتيجيات ترتيب مستقر تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.

هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟

لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 1 من أصل 4.

كم من الوقت يستغرق درس «‏table.sort مع دوال المقارنة»؟

معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.

هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟

نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.

جميع الدروس في هذه الدورة

  1. ‏table.sort مع دوال المقارنة
  2. ‏table.concat وtable.move
  3. النسخ العميق والنسخ السطحي
  4. تحويل الجداول: map وfilter وreduce
← العودة إلى Lua Academy