التكرار عبر الجداول باستخدام pairs وipairs
اجتز الجداول بأمان باستخدام pairs() وipairs()
التكرار عبر الجداول باستخدام pairs وipairs درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 3 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
ipairs: التكرار المرتب على المصفوفات
تكرّر ipairs(t) على التسلسل الصحيح الذي يبدأ عند الفهرس 1، وتُرجع أزواج (index, value). وتتوقف عند أول قيمة nil. وهذا هو الخيار الآمن والمتوقع للجداول الشبيهة بالمصفوفات عندما يكون الترتيب مهمًا.
local fruits = {"apple","banana","cherry"}
for i, fruit in ipairs(fruits) do
print(i, fruit)
end
-- 1 apple
-- 2 banana
-- 3 cherrypairs: جميع المفاتيح
تكرّر pairs(t) على كل زوج مفتاح-قيمة غير nil في الجدول، بترتيب غير محدد. وتستخدم الدالة next() داخليًا. استخدموا pairs للقواميس، أو الجداول المختلطة، أو عندما تحتاجون إلى زيارة جميع المفاتيح بغض النظر عن نوعها.
local info = {name="Lua", version=5.4, embedded=true}
for k, v in pairs(info) do
print(k, v)
end
-- name Lua
-- version 5.4
-- embedded true (order may vary)الاختيار بين pairs و ipairs
استخدموا ipairs للمصفوفات المتسلسلة (ترتيب مضمون، وتتوقف عند nil). واستخدموا pairs للقواميس، أو الجداول المختلطة، أو عندما تحتاجون إلى جميع المفاتيح. يعمل استخدام pairs على مصفوفة، لكنه لا يضمن أي ترتيب. أما استخدام ipairs على قاموس فيتجاهل المفاتيح غير الصحيحة.
local mixed = {10, 20, label="hello", 30}
-- ipairs: only sees 10, 20, 30 in order
for i, v in ipairs(mixed) do
io.write(v .. " ")
end
print() -- 10 20 30
-- pairs: sees everything
for k, v in pairs(mixed) do
print(k, v)
endعدّ العناصر
في التسلسلات، تعطي #t العدد. أما في القواميس، فلا يمكن الاعتماد على #t؛ لذا كرّروا باستخدام pairs وعدّوا العناصر يدويًا. وهذا تمييز مهم يمنع الأخطاء عند التعامل مع الجداول المختلطة أو ذات المفاتيح النصية.
local arr = {10, 20, 30}
print("#arr:", #arr) -- 3 (reliable)
local dict = {a=1, b=2, c=3}
print("#dict:", #dict) -- 0 (unreliable for dicts!)
local count = 0
for _ in pairs(dict) do count = count + 1 end
print("count:", count) -- 3تعديل القيم أثناء التكرار
يمكنكم بأمان تحديث قيمة مفتاح موجود أثناء التكرار باستخدام pairs. لكن إضافة المفاتيح أو إزالتها أثناء التكرار سلوك غير معرّف. اجمعوا التغييرات وطبّقوها بعد انتهاء الحلقة.
local prices = {apple=1.0, banana=0.5, cherry=2.0}
-- Safe: update existing values
for k, v in pairs(prices) do
prices[k] = v * 1.1 -- 10% markup
end
for k, v in pairs(prices) do
print(k, string.format("%.2f", v))
endجمع المفاتيح
من العمليات الشائعة جمع جميع المفاتيح في مصفوفة مرتبة للحصول على مخرجات حتمية. كرّروا باستخدام pairs لجمع المفاتيح، ثم استخدموا table.sort لترتيبها.
local config = {host="localhost", port=8080, debug=true}
local keys = {}
for k in pairs(config) do
keys[#keys+1] = k
end
table.sort(keys)
for _, k in ipairs(keys) do
print(k, "=", config[k])
end
-- debug = true
-- host = localhost
-- port = 8080التكرار على الجداول المتداخلة
بالنسبة إلى الجداول المتداخلة (جدول من الجداول)، اجمعوا بين حلقتين: تكرّر الحلقة الخارجية على المستوى الأعلى، بينما تكرّر الحلقة الداخلية على كل جدول متداخل. ويتعامل هذا النمط مع أي عمق باستخدام الاستدعاء递归ي للتداخلات غير المحدودة فعليًا.
local matrix = {
{1,2,3},
{4,5,6},
{7,8,9},
}
for i, row in ipairs(matrix) do
for j, val in ipairs(row) do
io.write(string.format("%3d", val))
end
print()
endالتصفية باستخدام ipairs
أنشئوا قائمة مفلترة بالتكرار باستخدام ipairs وإضافة العناصر التي تحقق شرطًا معينًا. وتكون النتيجة مصفوفة جديدة تحتوي على العناصر المطابقة فقط.
local function filter(t, pred)
local result = {}
for _, v in ipairs(t) do
if pred(v) then result[#result+1] = v end
end
return result
end
local nums = {1,2,3,4,5,6,7,8,9,10}
local evens = filter(nums, function(n) return n % 2 == 0 end)
print(table.concat(evens, " ")) -- 2 4 6 8 10التحويل باستخدام ipairs
طبّقوا تحويلًا على كل عنصر: كرّروا وابنوا مصفوفة جديدة بالقيم المحوَّلة. وهذا هو المقابل في Lua للدالة map() في اللغات الوظيفية.
local function map(t, fn)
local result = {}
for i, v in ipairs(t) do
result[i] = fn(v)
end
return result
end
local nums = {1, 2, 3, 4, 5}
local doubled = map(nums, function(n) return n * 2 end)
print(table.concat(doubled, " ")) -- 2 4 6 8 10
local words = {"hello","world"}
local upper = map(words, string.upper)
print(table.concat(upper, " ")) -- HELLO WORLDpairs مع المكررات المخصصة
يمكنكم جعل كائن مخصص قابلًا للتكرار بإرجاع مكرّر وحالة من دالة. ويشبه هذا النمط طريقة عمل pairs داخليًا: إذ تُرجع next, t, nil. وبالمثل، يُرجع مصنع المكرّر لديكم دالةً مع حالة اختيارية.
local function values(t)
local i = 0
return function()
i = i + 1
return t[i]
end
end
for v in values({"x","y","z"}) do
print(v)
end
-- x
-- y
-- zتحقق سريع
أي العبارات التالية صحيحة عن pairs() مقارنةً بـ ipairs()؟
مراجعة: pairs و ipairs
الملخص:
ipairs: مرتبة، بمفاتيح صحيحة تبدأ من 1، وتتوقف عند nilpairs: جميع المفاتيح، بأي ترتيب، ولا تتوقف مبكرًا- استخدموا
pairsللقواميس، وipairsللمصفوفات - لا تضيفوا المفاتيح أو تزيلوها أثناء التكرار باستخدام pairs؛ أما تحديث القيم الموجودة فهو آمن
- اجمعوا المفاتيح ورتّبوها للحصول على مخرجات حتمية
الأسئلة الشائعة
هل درس «التكرار عبر الجداول باستخدام pairs وipairs» مجاني؟
نعم — نص درس «التكرار عبر الجداول باستخدام pairs وipairs» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «التكرار عبر الجداول باستخدام pairs وipairs»؟
اجتز الجداول بأمان باستخدام pairs() وipairs() تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 3 من أصل 4.
كم من الوقت يستغرق درس «التكرار عبر الجداول باستخدام pairs وipairs»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الجداول بوصفها مصفوفات
- الجداول بوصفها قواميس
- التكرار عبر الجداول باستخدام pairs وipairs
- الجداول المتداخلة والبيانات المهيكلة