الحصول على فهرس إدخال الجدول
سؤال
لا يمكنني الحصول على فهرس إدخال الجدول. أحتاجه لإزالة عنصر من الجدول.
أنا أستعمل table.insert
لإضافة إدخالات إلى الجدول.
سؤال آخر: لماذا لا يوجد لدى Lua "التحميل الزائد" للوظيفة.
المحلول
t[k]=nil
يزيل من t
الدخول مع المفتاح k
.
بالنسبة للسؤال الثاني ، فإن الإجابة هي أن الجداول يمكن أن تحتوي على مواد فردية.
نصائح أخرى
الجداول تنفذ واحدة غير مرتبة على العديد من العلاقات بين المفاتيح والقيم. بمعنى آخر ، يمكن أن يظهر أي مفتاح معين (فهرس) مرة واحدة فقط في الجدول ، ولكن يمكن أن تظهر القيمة عدة مرات.
إذا كنت تعرف المفتاح k
, ، من ثم t[k] = nil
سوف يزيل كل من المفتاح والقيمة المرتبطة من الجدول. ومع ذلك ، فإن هذه العملية ليس لها أي تأثير على أي مفاتيح أو قيم أخرى في الجدول.
ال table.insert
و table.remove
تعمل الوظائف على مجموعة مفاتيح عدد صحيح متتابع تبدأ عند 1 ، والتي تستخدمها الاتفاقية لتنفيذ المصفوفات أو القوائم. لهذا الغرض ، يعالجون القيم الأخرى في القائمة للحفاظ على القائمة من تطوير الثقوب.
تتمثل إحدى طرق العثور على مفتاح تم العثور على بعض القيمة ببساطة في البحث في الجدول. إذا تم القيام بذلك أكثر من مرة ، فمن الجيد أن يكون من الجيد إنشاء جدول ثانٍ يزداد أزواج المفتاح/القيمة بحيث يكون البحث بالقيمة بالسرعة التي يتم البحث بها عن طريق الفهرس.
يعتمد التنفيذ المناسب على افتراضاتك واحتياجاتك. بعض العينات هي:
-- return the first integer index holding the value
function AnIndexOf(t,val)
for k,v in ipairs(t) do
if v == val then return k end
end
end
-- return any key holding the value
function AKeyOf(t,val)
for k,v in pairs(t) do
if v == val then return k end
end
end
-- return all keys holding the value
function AllKeysOf(t,val)
local s={}
for k,v in pairs(t) do
if v == val then s[#s+1] = k end
end
return s
end
-- invert a table so that each value is the key holding one key to that value
-- in the original table.
function Invert(t)
local i={}
for k,v in pairs(t) do
i[v] = k
end
return i
end