الجداول بوصفها قواميس
استخدم مفاتيح نصية ومختلطة لتخزين أزواج المفتاح والقيمة
الجداول بوصفها قواميس درس مجاني في Lua Academy على CoddyKit. هذا هو الدرس 2 من أصل 4. يمكنك قراءة الدرس كاملاً أدناه مجاناً — ثم تمرن عليه مباشرة في المتصفح باستخدام محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7. هذا الدرس جزء من مسار التعلم في Lua Academy، وتقدمك يتزامن عبر الويب وتطبيق CoddyKit. تتضمن دورة Lua Academy 4 دروس في المجموع.
المفاتيح النصية
تعمل الجداول ذات المفاتيح النصية كقواميس (خرائط تجزئة). يمكنكم الوصول إلى الحقول باستخدام تدوين النقطة t.key (للمعرّفات الصالحة)، أو تدوين الأقواس t["key"] (لأي نص). الصياغتان متكافئتان؛ ويدعم تدوين الأقواس المفاتيح الديناميكية.
local user = {}
user.name = "Alice"
user["age"] = 30
user.role = "admin"
print(user.name) -- Alice
print(user["age"]) -- 30
local field = "role"
print(user[field]) -- admin (dynamic key)مُنشئات الجداول
يمكن تهيئة القواميس باستخدام مُنشئ جدول وبصيغة key = value. وهذه هي الطريقة الأكثر شيوعًا لإنشاء السجلات في Lua. ويمكنكم الجمع بين العناصر بأسلوب المصفوفات والعناصر بأسلوب القواميس في المُنشئ نفسه.
local config = {
host = "localhost",
port = 3306,
database = "myapp",
debug = false,
tags = {"web", "api"}, -- nested array
}
print(config.host) -- localhost
print(config.port) -- 3306
print(config.tags[1]) -- webالعد باستخدام القواميس
من الاستخدامات التقليدية للقاموس عدّ التكرارات. كرّروا على قائمة، واستخدموا كل عنصر مفتاحًا، ثم زيدوا العداد. تحققوا من nil قبل الزيادة، واستخدموا count[word] or 0 قيمةً ابتدائية.
local words = {"lua","is","fast","lua","is","lua"}
local freq = {}
for _, w in ipairs(words) do
freq[w] = (freq[w] or 0) + 1
end
for word, count in pairs(freq) do
print(word, count)
end
-- lua 3, is 2, fast 1التجميع باستخدام القواميس
لتجميع البيانات حسب خاصية معينة، كرّروا على القائمة، واستخدموا مفتاح التجميع لإضافة العناصر إلى قائمة داخل قاموس. وهذا هو المقابل في Lua لـ GROUP BY في SQL أو لنمط defaultdict في Python.
local people = {
{name="Alice", dept="eng"},
{name="Bob", dept="hr"},
{name="Carol", dept="eng"},
{name="Dave", dept="hr"},
}
local groups = {}
for _, p in ipairs(people) do
local d = p.dept
groups[d] = groups[d] or {}
groups[d][#groups[d]+1] = p.name
end
print(table.concat(groups.eng, ", ")) -- Alice, Carolالتحقق من وجود مفتاح
اختبروا وجود مفتاح بمقارنة قيمته مع nil. انتبهوا: إذا كانت القيمة المخزنة عند مفتاح ما هي بالفعل nil، فسيُعتبر المفتاح غير موجود. ولتمثيل علامات الوجود، خزّنوا true بوصفها القيمة بدلًا من nil.
local cache = {result=42, mode="fast"}
if cache.result ~= nil then
print("cached:", cache.result) -- 42
end
-- Key not present:
if cache.timeout == nil then
print("no timeout set")
end
-- Membership set pattern
local allowed = {admin=true, editor=true}
if allowed["admin"] then
print("access granted")
endحذف المفاتيح
اضبطوا قيمة مفتاح في جدول على nil لإزالته. يختفي زوج المفتاح والقيمة، ويمكن لجمع البيانات المهملة استعادة الذاكرة التي كانت القيمة تستخدمها. ولا يمكنكم حذف متغير محلي بهذه الطريقة، بل إدخالات الجداول فقط.
local session = {token="abc123", user="Alice", expires=3600}
print(session.token) -- abc123
session.token = nil
print(session.token) -- nil (removed)
-- Count remaining keys
local count = 0
for _ in pairs(session) do count = count + 1 end
print(count) -- 2دمج القواميس
ادمجوا جدولين بالتكرار على أحدهما ونسخ إدخالاته إلى الآخر. إذا اشترك الجدولان في المفتاح نفسه، فستكون قيمة الجدول الثاني هي المعتمدة. وهذا هو المقابل في Lua لـ Object.assign في JavaScript.
local defaults = {color="blue", size=12, bold=false}
local overrides = {color="red", italic=true}
local function merge(base, over)
local result = {}
for k, v in pairs(base) do result[k] = v end
for k, v in pairs(over) do result[k] = v end
return result
end
local opts = merge(defaults, overrides)
print(opts.color, opts.size, opts.italic) -- red 12 trueأي نوع من المفاتيح
يمكن أن تكون مفاتيح الجداول أي قيمة غير nil وغير NaN: نصوصًا، وأرقامًا، وقيمًا منطقية، ودوال، وحتى جداول أخرى. تُخزَّن المفاتيح الصحيحة والمفاتيح النصية بطرق مختلفة داخليًا، لكن يمكن الوصول إليها جميعًا بالطريقة نفسها باستخدام تدوين الأقواس.
local t = {}
local function myKey() end
t["string"] = 1
t[42] = 2
t[true] = 3
t[myKey] = 4
print(t["string"]) -- 1
print(t[42]) -- 2
print(t[true]) -- 3
print(t[myKey]) -- 4التكرار المرتب
لا تضمن pairs() في Lua ترتيب التكرار. وللتكرار بترتيب محدد، اجمعوا المفاتيح في مصفوفة، ثم رتّبوها، وبعد ذلك كرّروا عليها.
local scores = {Alice=95, Bob=87, Carol=91, Dave=78}
local names = {}
for name in pairs(scores) do
names[#names+1] = name
end
table.sort(names)
for _, name in ipairs(names) do
print(name, scores[name])
end
-- Alice 95, Bob 87, Carol 91, Dave 78 (sorted)نمط القيم الافتراضية
من الأنماط المفيدة استخدام جدول "defaults" عبر جدول metatable يحتوي على __index. عندما لا يُعثر على مفتاح في الجدول الرئيسي، تبحث Lua عنه في جدول القيم الافتراضية. يتيح ذلك إنشاء إعدادات متعددة الطبقات من دون دمج الجداول.
local defaults = {timeout=30, retries=3, verbose=false}
local config = {timeout=60}
setmetatable(config, {__index = defaults})
print(config.timeout) -- 60 (overridden)
print(config.retries) -- 3 (from defaults)
print(config.verbose) -- false (from defaults)تحقق سريع
كيف تزيلون المفتاح "x" من الجدول t في Lua؟
مراجعة: الجداول بوصفها قواميس
النقاط الأساسية:
- تدوين النقطة وتدوين الأقواس:
t.key==t["key"] - يمكن أن تكون أي قيمة غير nil وغير NaN مفتاحًا
- اضبطوا قيمة المفتاح على nil لحذفه
- عدّ التكرارات:
t[k] = (t[k] or 0) + 1 - التكرار المرتب: اجمعوا المفاتيح ← رتّبوها ← كرّروا عليها
- استخدموا جدول metatable يحتوي على __index للقيم الافتراضية
الأسئلة الشائعة
هل درس «الجداول بوصفها قواميس» مجاني؟
نعم — نص درس «الجداول بوصفها قواميس» كامل متاح مجاناً هنا على الويب. لتمرينه بشكل تفاعلي (محرر أكواد مدمج ومدرس ذكاء اصطناعي متاح 24/7) وفتح باقي دورة Lua Academy، انتقل إلى CoddyKit PRO. تتضمن دورة Lua Academy 4 دروس في المجموع.
ماذا ستتعلم في «الجداول بوصفها قواميس»؟
استخدم مفاتيح نصية ومختلطة لتخزين أزواج المفتاح والقيمة تتمرن على Lua Academy مع أكواد عملية تشغلها مباشرة في المتصفح، ومدرس ذكاء اصطناعي متاح 24/7 يجيب على أسئلتك أثناء عملك.
هل أحتاج إلى خبرة سابقة لأبدأ Lua Academy؟
لا تُشترط خبرة سابقة. Lua Academy على CoddyKit منظم للمبتدئين حتى المتقدمين، لذا يمكنك البدء من هنا أو من البداية والتقدم بسرعتك الخاصة. هذا هو الدرس 2 من أصل 4.
كم من الوقت يستغرق درس «الجداول بوصفها قواميس»؟
معظم دروس CoddyKit تستغرق حوالي 5–10 دقائق. كل منها موجز وتفاعلي، لذا تحرز تقدماً مستمراً وتستأنف من حيث توقفت عبر الويب والتطبيق.
هل يمكنني كتابة وتشغيل أكواد في درس Lua Academy هذا؟
نعم. كل درس في Lua Academy يتضمن محرر أكواد مدمج، لذا تكتب وتشغل أكواداً حقيقية مباشرة في متصفحك وتحصل على تعليقات فورية من الذكاء الاصطناعي — بدون إعداد محلي.
جميع الدروس في هذه الدورة
- الجداول بوصفها مصفوفات
- الجداول بوصفها قواميس
- التكرار عبر الجداول باستخدام pairs وipairs
- الجداول المتداخلة والبيانات المهيكلة