अगर रूबी हैश में सभी वस्तुओं को परिभाषित कर रहे हैं की जाँच (नहीं के बराबर) के लिए सबसे अच्छा तरीका क्या है?मैं कैसे पुष्टि करते हैश पर सभी तत्वों को परिभाषित कर रहे हैं?
बयान झूठा लौटना चाहिए अगर हैश में कम से कम एक तत्व नहीं के बराबर है।
अगर रूबी हैश में सभी वस्तुओं को परिभाषित कर रहे हैं की जाँच (नहीं के बराबर) के लिए सबसे अच्छा तरीका क्या है?मैं कैसे पुष्टि करते हैश पर सभी तत्वों को परिभाषित कर रहे हैं?
बयान झूठा लौटना चाहिए अगर हैश में कम से कम एक तत्व नहीं के बराबर है।
आप हैं कि कोई विधेय एक गणनीय के सभी तत्वों के लिए सच है की जाँच करने के all?
उपयोग कर सकते हैं। तो:
hash.values.all? {|x| !x.nil?}
या
hash.all? {|k,v| !v.nil?}
आप भी जाँच करना चाहते हैं, सभी कुंजी के रूप में अच्छी तरह से गैर-शून्य कर रहे हैं, आप में संशोधन कर सकते हैं कि करने के लिए:
hash.all? {|k,v| !v.nil? && !k.nil?}
Enumerable#all?
विधि करता है बिल्कुल आपको क्या चाहिए
एक और तरीका है:
!hash.values.include? nil
बीटीडब्ल्यू, रेल में यह भी बेहतर है: 'हैश.वल्यू.एक्ससी? nil' –
एक तत्व (मान) वह यह है कि nil
परिभाषित किया गया है। यह nil
वस्तु के रूप में परिभाषित किया है।
आप अगर कोई कुंजी है याद आ रही जाँच के लिए इच्छुक रहे हैं, तो निम्न कार्य करें:?
hash = {:key1 => nil, :key2 => 42, :key3 => false}
keys = [:key1, :key2, :key3]
all_defined = keys.all?{|key| hash.has_key?(key)} # Returns true
एक ब्लॉक के बिना
'सब' स्वचालित रूप से जाँच करता है अगर (सरणी) तत्वों गैर शून्य हैं, इसलिए मूल्य जांच को 'hash.values.all?' में घटाया जा सकता है, और कुंजी + मान 'हैश.flatten.all? 'पर जांचें! –
@glenn: काफी नहीं। यह जांचता है कि वे सच हैं। 'झूठा' शून्य नहीं है, लेकिन यह सच भी नहीं है। – sepp2k
यदि आप रूबी 1.8.7 या बाद में, या रेल पर हैं, तो आप 'कर सकते हैं! हैश.वल्यूज.एनी? (और: शून्य?) '। –