मुझे पता है कि यह एक पुरानी पोस्ट है, लेकिन मैं वंशावली के लिए कुछ जोड़ना चाहता था। आपके पास जो समस्या है, उसे संभालने का सरल तरीका कुंजी के मूल्य की एक और तालिका बनाना है।
यानी। आपके पास 2 टेबल हैं जिनके समान मूल्य है, एक दिशा को इंगित करता है, एक दूसरे को इंगित करता है।
function addValue(key, value)
if (value == nil) then
removeKey(key)
return
end
_primaryTable.key = value
_secodaryTable.value = key
end
function removeKey(key)
local value = _primaryTable.key
if (value == nil) then
return
end
_primaryTable.key = nil
_secondaryTable.value = nil
end
function getValue(key)
return _primaryTable.key
end
function containsValue(value)
return _secondaryTable.value ~= nil
end
फिर आप नई तालिका से पूछ सकते हैं कि यह कुंजी 'तत्व' है या नहीं। यह अन्य तालिका के हर मूल्य के माध्यम से पुन: प्रयास करने की आवश्यकता को रोकता है।
यदि यह पता चला है कि आप वास्तव में 'तत्व' को कुंजी के रूप में उपयोग नहीं कर सकते हैं, क्योंकि यह उदाहरण के लिए एक स्ट्रिंग नहीं है, तो उदाहरण के लिए चेकसम या 'टॉस्ट्रिंग' जोड़ें, और उसके बाद इसे उपयोग करें कुंजी।
आप ऐसा क्यों करना चाहते हैं? यदि आपकी टेबल बहुत बड़ी हैं, तो प्रत्येक तत्व के माध्यम से पुनरावृत्ति करने के लिए समय की मात्रा महत्वपूर्ण होगी, जो आपको इसे अक्सर करने से रोकती है। अतिरिक्त मेमोरी ओवरहेड अपेक्षाकृत छोटा होगा, क्योंकि यह उसी ऑब्जेक्ट की 2 प्रतियों की बजाय उसी ऑब्जेक्ट पर 2 पॉइंटर्स संग्रहीत करेगा। यदि आपकी टेबल बहुत छोटी हैं, तो इससे बहुत कम मायने रखता है, वास्तव में यह एक और नक्शा लुकअप करने के बजाय फिर से तेज हो सकता है।
प्रश्न का शब्द हालांकि दृढ़ता से सुझाव देता है कि आपके पास सौदा करने के लिए बड़ी संख्या में आइटम हैं।
_, नोटेशन का क्या अर्थ है? – Martin
यह केवल "कचरा" चर है जिसे '_' नाम दिया गया है। 'जोड़े()' रिटर्न 'कुंजी, मान', लेकिन इस उदाहरण में मुझे केवल मूल्य की आवश्यकता है। यह एक तरह का एक सम्मेलन है (किताब "प्रोग्रामिंग इन लूआ" http://www.lua.org/pil/index.html) में इस '_' चर का उपयोग करने के लिए चीजों को स्टोर करने के लिए योन की आवश्यकता नहीं है। – Wookai