نوع بيانات الجدول يمكنه تخزين قيم متعددة من أي نوع ليس nil، بما في ذلك القيم المنطقية، الأرقام، السلاسل النصية، الدوال، وجداول أخرى. قم بإنشاء الجداول باستخدام الأقواس المتعرجة ({}):
-- إنشاء جدول فارغ وتعيينه للمتحول "t"local t = {}print(t) -- {}
يمكنك استخدام الجدول كـ مصفوفة أو قاموس. تستخدم المصفوفات قائمة مرتبة من الأرقام كمؤشرات، لكن القواميس يمكن أن تحتوي على أرقام، سلاسل نصية، وأشياء كمؤشرات.
لمزيد من المعلومات حول الدوال المدمجة للعمل مع الجداول، راجع مكتبة table.
المصوفات
المصفوفة هي قائمة مرتبة من القيم. تعد المصفوفات مفيدة لتخزين مجموعات البيانات، مثل مجموعة من اللاعبين الذين لديهم أذونات خاصة.
إنشاء المصفوفات
لإنشاء مصفوفة باستخدام جدول Luau، قم بتعريف القيم بترتيب متسلسل، مفصولة بفواصل.
-- إنشاء مصفوفة بثلاث عناصرlocal testArray = {"سلسلة نصية", 3.14159, true}print(testArray)
القراءة من المصفوفات
للقراءة من مصفوفة، أضف زوجاً من الأقواس المربعة بعد الإشارة إليها وحدد رقم الفهرس للعناصر داخلها ([pos]):
-- إنشاء مصفوفة بثلاث عناصرlocal testArray = {"سلسلة نصية", 3.14159, true}print(testArray[1]) -- سلسلة نصيةprint(testArray[2]) -- 3.14159print(testArray[3]) -- true
الكتابة إلى المصفوفات
لتعريف أو إعادة كتابة قيمة مصفوفة عند فهرس، قم بتعريف رقم الفهرس في أقواس مربعة ([index]) متبوعًا بـ = والقيمة:
local testArray = {"سلسلة نصية", 3.14159, true}testArray[2] = 12345testArray[4] = "سلسلة نصية جديدة"print(testArray[2]) -- 12345print(testArray[4]) -- سلسلة نصية جديدة
التكرار على المصفوفات
للتكرار عبر مصفوفة، يمكنك استخدام حلقة for. نظرًا لأن للمصفوفات مؤشرات عددية، يمكنك أيضًا استخدام حلقة for عددية من 1 إلى طول المصفوفة (#array).
local testArray = {"سلسلة نصية", 3.14159, true, "سلسلة نصية جديدة"}-- حلقة باستخدام التكرار العامfor index, value in testArray doprint(index, value)end-- التكرار باستخدام مشغل طول المصفوفة (#)for index = 1, #testArray doprint(index, testArray[index])end
إدراج عناصر
يوجد طريقتان مدمجتان لإدراج عنصر في نهاية مصفوفة:
- تمرير مرجع إلى المصفوفة وقيمة العنصر إلى دالة table.insert() الخاصة بـ Luau.
- إضافة العنصر الجديد إلى المصفوفة باستخدام بناء جملة array[#array+1].
local testArray = {"سلسلة نصية", 3.14159}table.insert(testArray, "سلسلة نصية جديدة")testArray[#testArray+1] = "سلسلة نصية جديدة أخرى"print(testArray[3]) -- سلسلة نصية جديدةprint(testArray[4]) -- سلسلة نصية جديدة أخرى
لإدراج عنصر بين بداية ونهاية مصفوفة، قم بتضمين قيمة موضع كوسيط ثاني لدالة table.insert(). هذا يقوم بإدراج العنصر الجديد ودفع العناصر التالية إلى أعلى بموضع فهرس واحد.
local testArray = {"العنصر الأول", "العنصر التالي"}table.insert(testArray, 2, "العنصر الجديد #2")print(testArray[1]) -- العنصر الأولprint(testArray[2]) -- العنصر الجديد #2print(testArray[3]) -- العنصر التالي
إزالة العناصر
لإزالة عنصر من مصفوفة، استخدم table.remove(). يقوم بإزالة العنصر في الموضع المحدد وينقل أي عناصر لاحقة إلى الخلف بموضع فهرس واحد.
local testArray = {"العنصر الأول", "العنصر التالي", "العنصر الأخير"}table.remove(testArray, 2)print(testArray[1]) -- العنصر الأولprint(testArray[2]) -- العنصر الأخير
القواميس
القواميس هي امتداد للمصفوفات. تخزن القواميس مجموعة من أزواج المفتاح والقيمة، حيث يمكن أن تكون المفاتيح أي رقم، سلسلة نصية، أو كائن.
إنشاء القواميس
لإنشاء جدول قاموس، قم بتعريف كل مفتاح متبوعًا بـ = و القيمة. تفصل كل زوج مفتاح-قيمة بفاصلة:
local testDictionary = {fruitName = "ليمون",fruitColor = "أصفر",sour = true}
يمكن أن تكون المفاتيح في القواميس أرقامًا، سلاسل نصية، وأشياء. على سبيل المثال، يمكن أن يكون المفتاح أيضًا Instance. لاستخدام الأشياء كمفاتيح، قم بتعريف المفتاح في أقواس مربعة ([key]):
local part = Instance.new("Part")local testDictionary = {partType = "كتلة",[part] = true}
القراءة من القواميس
للقراءة من قاموس، أضف زوجاً من الأقواس بعد الإشارة إليه وحدد اسم المفتاح. يمكنك الإشارة مباشرة إلى مفتاح سلسلة باستخدام إما (["key"]) أو (.key)، أو استخدم بدلاً من ذلك قيمة متغيرة ([key]).
local part = Instance.new("Part")local testDictionary = {partType = "كتلة",[part] = true}-- تضمين علامات الاقتباس للمفاتيح النصيةprint(testDictionary["partType"]) -- كتلة-- أو استخدم . للفهرسة دون المسافات للمفاتيح النصيةprint(testDictionary.partType) -- كتلة-- تجاهل علامات الاقتباس للمفاتيح غير النصيةprint(testDictionary[part]) -- true
الكتابة إلى القواميس
لتعريف أو إعادة كتابة قيمة مفتاح قاموس جديد أو موجود، قم بتعريف اسم المفتاح في أقواس ([key]) أو، إذا كان المفتاح نصيًا، استخدم (.key) متبوعًا بـ = والقيمة:
local testDictionary = {fruitName = "ليمون",sour = true}-- تغيير قيمة المفاتيح الموجودةtestDictionary["fruitName"] = "كرز"testDictionary.sour = false-- إدراج زوج مفتاح-قيمة جديدtestDictionary.fruitCount = 10print(testDictionary.fruitName) -- كرزprint(testDictionary.sour) -- falseprint(testDictionary.fruitCount) -- 10
التكرار على القواميس
للتكرار على قاموس، استخدم حلقة for:
local testDictionary = {fruitName = "ليمون",fruitColor = "أصفر",sour = true}for key, value in testDictionary doprint(key, value)end--[[ الناتج الناتج:fruitName ليمونsour truefruitColor أصفر]]
إزالة أزواج المفتاح-القيمة
لإزالة أو محو زوج مفتاح-قيمة من قاموس، قم بتعيين قيمته لمفتاح إلى nil.
local testDictionary = {fruitName = "ليمون",fruitColor = "أصفر",sour = true}testDictionary.sour = nilfor key, value in testDictionary doprint(key, value)end--[[ الناتج الناتج:fruitName ليمونfruitColor أصفر]]
الجداول كمرجع
إذا قمت بتخزين جدول في متغير جديد، لا يقوم Luau بإنشاء نسخة من ذلك الجدول. بدلاً من ذلك، يصبح المتغير مرجعًا، أو مؤشرًا، إلى الجدول الأصلي. أي إشارة إلى جدول تعكس أي تغييرات على الجدول الأصلي:
local originalArray = {10, 20}local arrayReference = originalArrayprint("الأصلي:", originalArray[1], originalArray[2])print("المرجع:", arrayReference[1], arrayReference[2])-- تغيير القيم في المصفوفة الأصليةoriginalArray[1] = 1000originalArray[2] = 2000print("المرجع:", arrayReference[1], arrayReference[2])--[[ الناتج الناتج:الأصلي: 10 20المرجع: 10 20المرجع: 1000 2000]]
نسخ الجداول
النسخ السطحية
لنسخ جدول بدون أي جداول متداخلة، يقدم Luau دالة table.clone().
local original = {key = "value",engine = "Roblox",playerID = 505306092}local clone = table.clone(original)
النسخ العميق
لنسخ جدول معقد أكثر يحتوي على جداول متداخلة بداخله، ستحتاج إلى استخدام دالة تكرارية مشابهة لما يلي:
-- الدالة المستخدمة للنسخ العميق لجدول
local function deepClone(original)
-- تعريف الجدول الجديد للنسخة
local clone = table.clone(original)
-- حلقة عبر الجدول الأصلي للتحقق من قيم الجداول
-- إذا تم العثور على جدول كقيمة، قم بنسخه بشكل عميق إلى المفتاح (الفهرس)
for key, value in original do
if type(value) == "table" then
clone[key] = deepClone(value)
end
end
-- إرجاع النسخة النهائية من الجدول المنسوخ بشكل عميق
return clone
end
مع وجود الدالة في مكانها، يمكنك إجراء نسخة عميقة كما يلي:
local original = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}local clone = deepClone(original)
تجميد الجداول
يجعل تجميد جدول الجداول غير قابلة للتعديل، وهو مفيد لإنشاء قيم ثابتة لا تريد تغييرها. التجميد دائم؛ لا يوجد دالة "فك التجميد" أو "إذابة". للتحقق مما إذا كان الجدول مجمداً، استخدم table.isfrozen().
التجميد السطحي
لتجميد جدول بدون أي جداول متداخلة، يقدم Luau دالة table.freeze().
local target = {key = "value",engine = "Roblox",playerID = 505306092}table.freeze(target)target.playerID = 1 --> محاولة تعديل جدول للقراءة فقط
التجميد العميق
لتجميد جدول أكثر تعقيدًا يحتوي على جداول متداخلة بداخله، استخدم دالة تكرارية مشابهة لما يلي:
local function deepFreeze(target)
-- تجميد الجدول بشكل سطحي
table.freeze(target)
-- تحقق من كل مفتاح في الجدول وجمده إذا كان جدولًا
for _, value in target do
-- تأكد من أن القيمة غير مجمدة؛ إذا كانت كذلك بالفعل، سيحدث خطأ
if type(value) == "table" and table.isfrozen(value) == false then
deepFreeze(value)
end
end
end
مع وجود الدالة في مكانها، يمكنك تجميد جدول بشكل عميق كما يلي:
local target = {key = "value",playerInfo = {playerID = 505306092,playerName = "PlayerName"},otherInfo = {{{1, 3, 5, 7, 9}}}}deepFreeze(target)target.playerInfo.playerID = 1 --> محاولة تعديل جدول للقراءة فقط