मेरे पास हैश की एक सरणी है, और मैं इसके अद्वितीय मूल्य चाहता हूं। कॉलिंग Array.uniq
मुझे वह नहीं देता जो मुझे उम्मीद है।रूबी में हैश की सरणी से अद्वितीय तत्व कैसे प्राप्त करूं?
a = [{:a => 1},{:a => 2}, {:a => 1}]
a.uniq # => [{:a => 1}, {:a => 2}, {:a => 1}]
मैं कहाँ की उम्मीद:
[{:a => 1}, {:a => 2}]
नेट पर चारों ओर खोज में, मैं एक समाधान है कि मैं के साथ खुश था के साथ नहीं आया था। लोगों ने Hash.eql?
और Hash.hash
को फिर से परिभाषित करने की अनुशंसा की, क्योंकि Array.uniq
यह पूछताछ कर रहा है।
संपादित करें: कहाँ मैं असली दुनिया में इस में भाग गया, हैश थोड़ा और अधिक जटिल थे। वे पार्स किए गए JSON का परिणाम थे जिनमें कई फ़ील्ड थे, जिनमें से कुछ मूल्य भी हैं। मेरे पास उन परिणामों का एक सरणी था जो मैं अद्वितीय मूल्यों को फ़िल्टर करना चाहता था।
मैं, फिर से परिभाषित Hash.eql?
और Hash.hash
समाधान पसंद नहीं है, क्योंकि मैं या तो विश्व स्तर पर Hash
को फिर से परिभाषित करने के लिए होगा, या मेरे सरणी में प्रत्येक प्रविष्टि के लिए यह फिर से परिभाषित। प्रत्येक प्रविष्टि के लिए Hash
की परिभाषा को बदलना बोझिल होगा, खासकर जब प्रत्येक प्रविष्टि के अंदर नेस्टेड हैश हो सकता है।
बदलने Hash
विश्व स्तर पर, कुछ की क्षमता है, खासकर अगर यह अस्थायी रूप से किया गया था। मैं एक और कक्षा या सहायक समारोह बनाना चाहता हूं जो पुराने परिभाषाओं को सहेजने और उन्हें बहाल करने के लिए लपेटा गया है, लेकिन मुझे लगता है कि यह वास्तव में आवश्यकतानुसार अधिक जटिलता जोड़ता है।
inject
का उपयोग Hash
को फिर से परिभाषित करने के लिए एक अच्छा विकल्प लगता है।
और अधिक बेहतर मैं एक लिंक मैं – edthix