الجداول

*This content is translated using AI (Beta) and may contain errors. To view this page in English, click here.

نوع بيانات الجدول يمكنه تخزين قيم متعددة من أي نوع ليس 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.14159
print(testArray[3]) -- true

الكتابة إلى المصفوفات

لتعريف أو إعادة كتابة قيمة مصفوفة عند فهرس، قم بتعريف رقم الفهرس في أقواس مربعة ([index]) متبوعًا بـ = والقيمة:


local testArray = {"سلسلة نصية", 3.14159, true}
testArray[2] = 12345
testArray[4] = "سلسلة نصية جديدة"
print(testArray[2]) -- 12345
print(testArray[4]) -- سلسلة نصية جديدة

التكرار على المصفوفات

للتكرار عبر مصفوفة، يمكنك استخدام حلقة for. نظرًا لأن للمصفوفات مؤشرات عددية، يمكنك أيضًا استخدام حلقة for عددية من 1 إلى طول المصفوفة (#array).


local testArray = {"سلسلة نصية", 3.14159, true, "سلسلة نصية جديدة"}
-- حلقة باستخدام التكرار العام
for index, value in testArray do
print(index, value)
end
-- التكرار باستخدام مشغل طول المصفوفة (#)
for index = 1, #testArray do
print(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]) -- العنصر الجديد #2
print(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 = 10
print(testDictionary.fruitName) -- كرز
print(testDictionary.sour) -- false
print(testDictionary.fruitCount) -- 10

التكرار على القواميس

للتكرار على قاموس، استخدم حلقة for:


local testDictionary = {
fruitName = "ليمون",
fruitColor = "أصفر",
sour = true
}
for key, value in testDictionary do
print(key, value)
end
--[[ الناتج الناتج:
fruitName ليمون
sour true
fruitColor أصفر
]]

إزالة أزواج المفتاح-القيمة

لإزالة أو محو زوج مفتاح-قيمة من قاموس، قم بتعيين قيمته لمفتاح إلى nil.


local testDictionary = {
fruitName = "ليمون",
fruitColor = "أصفر",
sour = true
}
testDictionary.sour = nil
for key, value in testDictionary do
print(key, value)
end
--[[ الناتج الناتج:
fruitName ليمون
fruitColor أصفر
]]

الجداول كمرجع

إذا قمت بتخزين جدول في متغير جديد، لا يقوم Luau بإنشاء نسخة من ذلك الجدول. بدلاً من ذلك، يصبح المتغير مرجعًا، أو مؤشرًا، إلى الجدول الأصلي. أي إشارة إلى جدول تعكس أي تغييرات على الجدول الأصلي:


local originalArray = {10, 20}
local arrayReference = originalArray
print("الأصلي:", originalArray[1], originalArray[2])
print("المرجع:", arrayReference[1], arrayReference[2])
-- تغيير القيم في المصفوفة الأصلية
originalArray[1] = 1000
originalArray[2] = 2000
print("المرجع:", 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 --> محاولة تعديل جدول للقراءة فقط
©2026 شركة Roblox Corporation. تُعد منصّة Roblox، وشعار Roblox وشعار "توسيع حدود المخيلة"، من ضمن علاماتنا التجارية المسجّلة وغير المسجّلة في الولايات المتحدة وبلدان أخرى.