हश में कोई विशिष्ट कुंजी मौजूद है या नहीं, इसकी जांच कैसे करें?


636

मैं जांच करना चाहता हूं कि "उपयोगकर्ता" कुंजी सत्र हैश में मौजूद है या नहीं। मैं यह कैसे कर सकता हूँ?

ध्यान दें कि मैं जांच नहीं करना चाहता कि कुंजी का मूल्य शून्य है या नहीं। मैं सिर्फ यह जांचना चाहता हूं कि "उपयोगकर्ता" कुंजी मौजूद है या नहीं।

जवाबों:


952

Hashकी key?विधि आपको बताती है कि क्या दी गई कुंजी मौजूद है या नहीं।

session.key?("user")

अच्छा: "स्ट्रिंग" एक्सेसर JSON.parse पार्स की गई वस्तुओं के लिए भी काम करता है :)
बिजन

2
यह मेरे लिए काम नहीं करता है: उपयोगकर्ता विधि ने इसके बजाय काम किया
आकाश अग्रवाल

295

जबकि Hash#has_key?काम हो जाता है, जैसा कि यहाँ मात्ज़ नोट करते हैं , इसके पक्ष में पदावनत किया गया है Hash#key?

hash.key?(some_key)

1
उस परिवर्तन के अनुरोध का अच्छा संदर्भ और बाद में मैट्स से प्रतिक्रिया।
जोशुआ पिंटर

क्या किसी को यकीन है?
कोडफ़ेस्टर

41

नवीनतम रूबी संस्करणों में हैश उदाहरण में एक key?विधि है:

{a: 1}.key?(:a)
=> true

आपके पास जो हैश में है उसके आधार पर प्रतीक कुंजी या एक स्ट्रिंग कुंजी का उपयोग करना सुनिश्चित करें:

{'a' => 2}.key?(:a)
=> false

2
स्पष्ट रूप से रूबी 1.6: रूबी- doc.com/docs/ProgrammingRuby/html/… (शायद पहले वाले, डन्नो जहां दस्तावेज जांचे गए थे) के रूप में जल्दी मौजूद थे
बेनी चेर्नियाव्स्की-पास्किन

28

यह बहुत देर हो चुकी है लेकिन अधिमानतः प्रतीकों को कुंजी के रूप में उपयोग किया जाना चाहिए:

my_hash = {}
my_hash[:my_key] = 'value'

my_hash.has_key?("my_key")
 => false 
my_hash.has_key?("my_key".to_sym)
 => true 

my_hash2 = {}
my_hash2['my_key'] = 'value'

my_hash2.has_key?("my_key")
 => true 
my_hash2.has_key?("my_key".to_sym)
 => false 

लेकिन हैश बनाते समय यदि आप स्ट्रिंग को कुंजी के रूप में पास करते हैं तो यह कुंजी में स्ट्रिंग की खोज करेगा।

लेकिन जब हैश बनाते हैं तो आप प्रतीक को key_key के रूप में पास करते हैं? प्रतीक का उपयोग करके कुंजियों की खोज करेंगे।


यदि आप रेल का उपयोग कर रहे हैं, तो आप इससे Hash#with_indifferent_accessबचने के लिए उपयोग कर सकते हैं ; दोनों hash[:my_key]और hash["my_key"]एक ही रिकॉर्ड की ओर इशारा करेंगे


6
यदि आप रेल का उपयोग कर रहे हैं, तो आप इससे Hash#with_indifferent_accessबचने के लिए उपयोग कर सकते हैं ; दोनों :my_keyऔर "my_key"एक ही रिकॉर्ड की ओर इशारा करेंगे
डेवोन पार्सन्स

5

आप हमेशा Hash#key?यह जांचने के लिए उपयोग कर सकते हैं कि कुंजी हैश में मौजूद है या नहीं।

अगर नहीं तो वह आपको लौटा देगा false

hash =  { one: 1, two:2 }

hash.key?(:one)
#=> true

hash.key?(:four)
#=> false


0

रेल 5 में, has_key? हैश में कुंजी मौजूद होने पर विधि जाँच। इसका उपयोग करने के लिए सिंटैक्स है:

YourHash.has_key? :yourkey
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.