2009-11-18 11 views
73

मेरे पास एक लुआ टेबल है जिसे मैं हैशैप के रूप में उपयोग करता हूं, यानी स्ट्रिंग कुंजियों के साथ:अपनी कुंजी से लुआ टेबल एंट्री कैसे निकालें?

local map = { foo = 1, bar = 2 } 

मैं अपनी कुंजी द्वारा पहचाने गए इस तालिका के तत्व को "पॉप" करना चाहता हूं। एक table.remove() विधि है, लेकिन यह केवल तत्व की अनुक्रमणिका को निकालने के लिए लेती है (यानी एक संख्या) और सामान्य कुंजी नहीं। मैं table.remove(map, 'foo') करने में सक्षम होना चाहता हूं और यहां मैंने इसे कार्यान्वित किया है:

function table.removekey(table, key) 
    local element = table[key] 
    table[key] = nil 
    return element 
end 

क्या ऐसा करने का कोई बेहतर तरीका है?

+4

+1 बहुत उपयोगी प्रश्न के लिए क्योंकि आपने "उत्तर" दिया था; भले ही कोई "बेहतर" तरीका न हो। –

उत्तर

64

नहीं, nil पर कुंजी का मान सेट करना तालिका के हैशपैप हिस्से में किसी आइटम को निकालने का स्वीकार्य तरीका है। आप क्या कर रहे हैं मानक है। हालांकि, मैं एक तालिका के सरणी भाग के लिए table.remove() ओवरराइड करने की अनुशंसा नहीं करता, डिफ़ॉल्ट तालिका .remove() कार्यक्षमता में इंडेक्स को पुनर्निर्मित करना शामिल है, जो आपका ओवरराइड नहीं करेगा। यदि आप अपने फ़ंक्शन को table फ़ंक्शन सेट में जोड़ना चाहते हैं, तो शायद मैं इसे table.removekey() या कुछ ऐसे नाम दूंगा।

+0

हटाने के बारे में प्रतिक्रिया के लिए धन्यवाद। समारोह के नाम के बारे में, यह मुख्य रूप से मेरा बिंदु स्पष्ट करने के लिए था। मैं आमतौर पर मानक कार्यों को ओवरराइड नहीं करता हूं। मैं निश्चित रूप से उस नाम के तहत इसका उपयोग नहीं करूँगा ('table.removekey() 'मेरी सबसे अच्छी पसंद भी होगी)। – Wookai

+0

यदि आप केवल एक ही ब्लॉक में इसका उपयोग कर रहे हैं, तो आप इसके बजाय स्थानीय फ़ंक्शन बनाकर प्रदर्शन-वार से भी बेहतर हो सकते हैं (प्रत्येक कॉल के लिए वैश्विक लुकअप के ओवरहेड को बचाता है)। मैं अक्सर 'table.insert' और' table.remove' को स्थानीय नेमस्पेस में आयात करता हूं यदि मैं अक्सर उनका उपयोग कर रहा हूं, अक्सर 'tinsert()' और 'tremove()' जैसी कुछ चीज़ों के रूप में। प्रदर्शन टिप के लिए – Amber

+0

धन्यवाद। मैं उन कार्यों को आयात करने की कोशिश करूंगा जो मैं स्थानीय नामस्थान में अक्सर उपयोग करता हूं यह देखने के लिए कि इससे बड़ा अंतर आता है या नहीं। – Wookai

 संबंधित मुद्दे

  • कोई संबंधित समस्या नहीं^_^