تحويل الجداول: map وfilter وreduce
أنشئ أدوات مساعدة وظيفية عالية الرتبة لتحويل الجداول
تحويل الجداول: map وfilter وreduce درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 4 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
الأنماط الوظيفية في Lua
لا تحتوي Lua على map/filter/reduce مدمجة، لكن من السهل جدًا تنفيذها باستخدام الإغلاقات وحلقات for العامة.
map: تحويل كل عنصر
تطبّق map دالةً على كل عنصر، وتعيد جدولًا جديدًا بالنتائج.
local function map(t, fn)
local result = {}
for i, v in ipairs(t) do result[i] = fn(v) end
return result
end
local doubled = map({1,2,3}, function(x) return x * 2 end)
print(table.concat(doubled, ", ")) -- 2, 4, 6filter: الاحتفاظ بالعناصر المطابقة
تحتفظ filter بالعناصر التي يعيد لها الشرط قيمة true فقط.
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 evens = filter({1,2,3,4,5}, function(x) return x % 2 == 0 end)
print(table.concat(evens, ", ")) -- 2, 4reduce: الاختزال إلى قيمة واحدة
تجمع reduce العناصر من اليسار إلى اليمين باستخدام مُجمِّع.
local function reduce(t, fn, init)
local acc = init
for _, v in ipairs(t) do acc = fn(acc, v) end
return acc
end
local sum = reduce({1,2,3,4,5}, function(a,b) return a+b end, 0)
print(sum) -- 15تسلسل العمليات
سَلْسِل map وfilter وreduce لإنشاء مسارات معالجة بيانات واضحة وتعبيرية.
local nums = {1,2,3,4,5,6,7,8,9,10}
local result = reduce(
map(
filter(nums, function(x) return x % 2 == 0 end),
function(x) return x * x end
),
function(a,b) return a + b end, 0
)
print(result) -- 220forEach: الآثار الجانبية
تكرّر forEach العناصر من دون إنشاء جدول جديد، ولذلك تفيد في الآثار الجانبية مثل الطباعة.
local function forEach(t, fn)
for i, v in ipairs(t) do fn(v, i) end
end
forEach({"a","b","c"}, function(v, i) print(i, v) end)flatMap: التحويل ثم التسطيح
تحوّل flatMap كل عنصر إلى قائمة، ثم تدمج جميع القوائم.
local function flatMap(t, fn)
local result = {}
for _, v in ipairs(t) do
for _, item in ipairs(fn(v)) do
result[#result+1] = item
end
end
return result
end
local expanded = flatMap({1,2,3}, function(x) return {x, x*10} end)zip: دمج جدولين
تقرن zip العناصر من جدولين في جدول من الأزواج.
local function zip(a, b)
local result = {}
for i = 1, math.min(#a, #b) do
result[i] = {a[i], b[i]}
end
return result
end
local zipped = zip({1,2,3}, {"a","b","c"})العمل مع جداول القواميس
بالنسبة إلى جداول المفتاح والقيمة، كرّر باستخدام pairs بدلًا من ipairs واجمع أزواج المفتاح والقيمة.
local function mapValues(t, fn)
local result = {}
for k, v in pairs(t) do result[k] = fn(v) end
return result
end
local doubled = mapValues({x=1,y=2}, function(v) return v*2 end)مفهوم التقييم الكسول
بالنسبة إلى مجموعات البيانات الكبيرة، فكّر في استخدام مكررات كسولة، وهي إغلاقات تنتج عنصرًا واحدًا في كل مرة، لتجنب إنشاء جداول وسيطة كبيرة.
ملاحظة حول الأداء
ينشئ كل من map وfilter تخصيصًا لجدول جديد. وفي الحلقات المكثفة، قد يكون التعديل في الموضع أكثر كفاءة، لكنه يضحي بعدم قابلية التغيير والوضوح.
سؤال حول reduce
ما القيمة التي تعيدها reduce({1,2,3,4}, function(a,b) return a+b end, 0)؟
مراجعة: map/filter/reduce
تحوّل map، وتنتقي filter، وتختزل reduce. وتشكل هذه الدوال الثلاث عالية الرتبة أساس معالجة البيانات الوظيفية في Lua.
الأسئلة الشائعة
هل درس «تحويل الجداول: map وfilter وreduce» مجاني؟
نعم — نص درس «تحويل الجداول: map وfilter وreduce» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «تحويل الجداول: map وfilter وreduce»؟
أنشئ أدوات مساعدة وظيفية عالية الرتبة لتحويل الجداول تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 4 من أصل 4.
كم من الوقت يستغرق درس «تحويل الجداول: map وfilter وreduce»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- table.sort مع دوال المقارنة
- table.concat وtable.move
- النسخ العميق والنسخ السطحي
- تحويل الجداول: map وfilter وreduce