यहाँ एक अनुमान है, कि "क्या सरणी में X होता है?" चेक को सरणी को हैश में बदलना है। दक्षता दुर्लभ संसाधन पर निर्भर करती है, अक्सर समय लेकिन कभी-कभी अंतरिक्ष और कभी-कभी प्रोग्रामर प्रयास। आप कम से कम एक साथ एक सूची और सूची का हैश रखकर खपत की गई मेमोरी को दोगुना कर रहे हैं। साथ ही आप अधिक मूल कोड लिख रहे हैं जिसे आपको परीक्षण, दस्तावेज़, आदि की आवश्यकता होगी
एक वैकल्पिक, देखो सूची :: MoreUtils मॉड्यूल में, विशेष रूप से कार्य करता है के रूप में any()
, none()
, true()
और false()
। वे सभी सशर्त और तर्क के रूप में एक सूची के रूप में एक ब्लॉक लेते हैं, map()
और grep()
:
print "At least one value undefined" if any { !defined($_) } @list;
मैंने एक त्वरित परीक्षा चलाई, जो एक सरणी (25000 शब्दों) में आधे / usr / शेयर / तानाशाह / शब्दों के आधे हिस्से में लोड हो रही थी, फिर सरणी में पूरे शब्दकोश (हर 5000 वें शब्द) से चुने गए ग्यारह शब्दों की तलाश में, दोनों सरणी का उपयोग करके any()
सूची से विधि और कार्य :: MoreUtils।
स्रोत से निर्मित पर्ल 5.8.8 पर, अरै-टू-हैश विधि विधि की तुलना में लगभग any()
1100 गुना तेज है (उबंटू 6.06 के पैक किए गए पर्ल 5.8.7 के तहत तेजी से 1300x)।
हालांकि यह पूरी कहानी नहीं है - सरणी-से-हैश रूपांतरण में लगभग 0.04 सेकंड लगते हैं जो इस मामले में सरणी-से-हैश विधि के समय की दक्षता को 1.5x-2x any()
विधि से अधिक तेजी से मारता है । अभी भी अच्छा है, लेकिन लगभग नहीं के रूप में तारकीय।
मेरी आंत की भावना यह है कि सरणी-से-हैश विधि any()
ज्यादातर मामलों में हरा देने वाली है, लेकिन अगर मैं कुछ और ठोस मैट्रिक्स (बहुत सारे परीक्षण मामले, सभ्य सांख्यिकीय विश्लेषण, शायद कुछ बड़ा हो तो मुझे बहुत अच्छा लगेगा) हे प्रत्येक विधि, आदि का एल्गोरिथम विश्लेषण) आपकी आवश्यकताओं के आधार पर, सूची :: MoreUtils एक बेहतर समाधान हो सकता है; यह निश्चित रूप से अधिक लचीला है और कम कोडिंग की आवश्यकता है। याद रखें, समयपूर्व अनुकूलन एक पाप है ... :)