سؤال

لا يمكنني الحصول على فهرس إدخال الجدول. أحتاجه لإزالة عنصر من الجدول.

أنا أستعمل 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
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top