हाल ही में मुझे एक सरणी के साथ कोई समस्या थी जिसमें कुछ सौ हजार मूल्य थे और केवल एक चीज जो मैं करना चाहता था यह जांचना था कि कोई मान पहले से मौजूद है या नहीं। मेरे मामले में यह एक वेबसर्वर लॉग से आईपी थे। तो मूल रूप से की तरह कुछ: हालांकि देखने समय नाटकीय रूप से वृद्धि हुई है और लुकअप की 10k 17 सेकंड या तो चारों ओर ले लियाPHP में सरणी की तुलना में वैकल्पिक डेटा संरचनाएं हैं, जहां मैं विभिन्न इंडेक्स तकनीकों से लाभ उठा सकता हूं?
in_array(ip2long(ip),$myarray)
काम
किया था।
इसलिए इस मामले में मुझे परवाह नहीं था कि मेरे पास डुप्लिकेट है या नहीं, मुझे केवल अस्तित्व की जांच करने की आवश्यकता है। तो मैं इस तरह सूचकांक में आईपी संग्रहीत कर सकती है:
isset($myarray[ip2long($ip)])
और बूम, देखने बार नीचे 17 सेकंड (और अधिक) से 0.8 सेकंड के एक स्थिर समय पर 10k लुकअप के लिए चला गया। सरणी प्रविष्टि के लिए एक मान के रूप में मैंने अभी int 1
का उपयोग किया था।
मुझे लगता है कि सरणी सूचकांक शायद कुछ बी-पेड़ पर आधारित है जिसमें लॉग (एन) लुकअप समय और हैशपैप पर इंडेक्स होना चाहिए।
इंडेक्स का उपयोग करते हुए मेरे मामले में ठीक काम किया, लेकिन क्या कोई डेटा संरचनाएं हैं जहां मैं हैशैप्स को वैल्यू इंडेक्स के रूप में उपयोग कर सकता हूं, जहां कई मान भी हो सकते हैं (मुझे एहसास है कि यह केवल तभी समझ में आता है जब बहुत अधिक डुप्लीकेट नहीं होते और मैं रेंज/खोज अनुरोधों का कुशलता से उपयोग नहीं कर सकता, जो वृक्ष संरचनाओं का प्राथमिक लाभ है)?
को सही करने के लिए स्वतंत्र महसूस करें कभी-कभी अच्छे समाधान आपके सामने सही होते हैं और आप बस बहुत जटिल सोचते हैं। -- अच्छी तरह से किया। – Smamatti
उसने मुझे जो समझ लिया उससे फ़्लिप किया। –
जारी करने का उपयोग ($ a [$ key]) array_key_exists ($ key, $ a) से अधिक (!) तेज़ है, क्योंकि जारी एक संरचना है और array_key_exists() एक फ़ंक्शन है। – BurninLeo