यदि आप कार्य का उपयोग कर रहे हैं ivesupport (रेल का हिस्सा), आप Hash
पर 2 अतिरिक्त तरीकों का लाभ ले सकते:
Hash#slice
बस कुंजियां के लिए कहा साथ अलग-अलग तर्कों के रूप में वांछित कुंजी (नहीं चाबियों का एक सरणी) लेता है और एक नया हैश रिटर्न के लिये।
Hash#except
slice
के समान तर्क लेता है, लेकिन तर्कों में नहीं होने वाली कुंजी के साथ एक नया हैश देता है।
पहले लोड activesupport:
require 'active_support/core_ext'
मर्ज केवल जिसका कुंजी h
में पहले से ही j
से प्रविष्टियां (अर्थातसंशोधित, लेकिन h
में किसी भी जोड़ सकते हैं या नहीं निकालते हैं प्रविष्टियों):
h.merge(j.slice(*h.keys))
उदाहरण:
j.except(*h.keys)
:
ignore_new = ->(h, j) { h.merge(j.slice(* h.keys)) }
ignore_new.({a: 1, b: 2, c: 3}, {b: 10, c: 11, d: 12})
# => {:a=>1, :b=>10, :c=>11}
j
से बचा कि h
में नहीं थे जाओ बोनस:
आप सच्चे चौराहे चाहते हैं, जिसका अर्थ है आप एक परिणाम केवल कुंजी है कि 2 हैश के बीच आम में हैं कि चाहते हैं, ऐसा करते हैं:
h.merge(j).slice(* (h.keys & j.keys))
उदाहरण: h
से
intersect = ->(h, j) { h.merge(j).slice(* (h.keys & j.keys)) }
intersect.({a: 1, b: 2, c: 3}, {b: 10, c: 11, d: 12})
# => {:b=>10, :c=>11}
और बचा हुआ है कि नहीं थे j
में 'टी:
h.except(*j.keys)
अगर आपको स्ट्रिंगचाहते activesupport के HashWithIndifferentAccess
उपयोग कर सकते हैंप्रतीकात्मक कुंजी-पहुंच समकक्ष समझा जा सकता है।
ध्यान दें कि उपर्युक्त उदाहरणों में से कोई भी मूल हैश बदलता नहीं है; इसके बजाय नए हैंश वापस कर दिए जाते हैं।
यह एक हैश चौराहे की तरह है। आप विभिन्न मूल्यों के साथ कुंजी/मूल्य जोड़े के साथ क्या करना चाहते हैं? उदाहरण के लिए: एच = {: foo => "value1"}; जे = {: foo => "value2",: अतिरिक्त => "मान"} –
@ रॉन गीजमैन - मैं बस उन्हें बाहर फेंकना चाहता हूं। लेकिन आपने मेरी रुचि बढ़ा दी है। क्या कुछ हैश/संख्यात्मक विधि है जो दो हैश (एक डुप्लिकेट कुंजी के साथ और दूसरा बचे हुए) के साथ लौटाएगी? – elmt
नहीं, लेकिन DigitalRoss के उत्तर के आधार पर कुछ उपयोग करना आसान है। बस दो अलग-अलग हैंशों में सहेजें- एक मैचों के लिए और एक गैर-मैचों के लिए। –