2012-02-25 16 views
44

में हैश खाली है या नहीं, यह जांचने के लिए कि हैश खाली है या नहीं, मैं निम्नलिखित कोड का उपयोग करता हूं। क्या कोई बेहतर तरीका है और क्या इसका उपयोग सुरक्षित है?कैसे जांचें कि हैश

if (!keys %hash) { print "Empty";} 
+6

यदि आपको लगता है कि आपके प्रश्न का उत्तर दिया गया है, तो आपको इसके बाईं ओर स्थित चेकमार्क पर क्लिक करके एक उत्तर स्वीकार करना चाहिए। – TLP

उत्तर

77
if (%hash) 

ठीक काम करेगा।

perldoc perldata से:

आप अदिश संदर्भ में एक हैश का मूल्यांकन करते हैं, तो यह गलत लौटाता है यदि हैश खाली है। यदि कोई कुंजी/मूल्य जोड़े हैं, तो यह सच हो जाता है; अधिक ठीक है, लौटाया गया मान एक स्ट्रिंग है जिसमें प्रयुक्त बाल्टी और आवंटित बाल्टी की संख्या शामिल है, जो स्लैश से अलग है।

+2

यह 'कुंजी% हैश' से बहुत धीमा लगता है। – choroba

17

सरल:

if (!%hash) { 
    print "Empty"; 
} 

! एक अदिश संदर्भ लगाता है, और एक अदिश संदर्भ में मूल्यांकन हैश रिटर्न:

  • false अगर वहाँ शून्य कुंजियों (दस्तावेज में परिभाषित नहीं किया लेकिन प्रयोगात्मक रिटर्न 0

  • एक स्ट्रिंग वाचक कितने प्रयुक्त/आवंटित कर रहे हैं बाल्टी> 0 चाबी के लिए उपयोग किया जाता है, जो निश्चित रूप से नहीं झूठी हो जाएगा (जैसे "3/6")

+0

नहीं, यह '" गलत "नहीं लौटाता है, जो एक वास्तविक मूल्य होगा। यह शून्य देता है। – Borodin

+0

@ बोरोडिन - गलत उद्धरण। स्थिर – DVK

20

a bug जो अदिश संदर्भ में बंधे हैश की वजह से हमेशा गलत वापस जाने के लिए नहीं था। बग fixed in 5.8.5 था। यदि आप पीछे की संगतता से चिंतित हैं कि अब तक मैं if(!keys %hash) के साथ रहूंगा। अन्यथा दूसरों द्वारा अनुशंसित if(!%hash) का उपयोग करें।

1

"बेहतर" एक व्यक्तिपरक शब्द है। हालांकि मैं तर्क दूंगा कि समझने में आसान कोड को "बेहतर" के रूप में वर्णित किया जा सकता है। इस कारण से मैंने निष्कर्ष निकाला है कि !keys %hash बेहतर है, क्योंकि पेर्ल कोड लिखने वाले सभी लोग यह जान लेंगे कि यह कोड क्या करता है और यह काम करता है। !%hash कम से कम कुछ ऐसा है जो मुझे यह सुनिश्चित करने के लिए देखना होगा कि यह वास्तव में काम करता है या ऐसा लगता है कि यह काम करेगा। (कारण यह है कि स्केलर संदर्भ में हैश का रिटर्न वैल्यू भ्रमित है जबकि स्केलर संदर्भ में एक सरणी व्यवहार अच्छी तरह से जाना जाता है और अक्सर उपयोग किया जाता है।)

इसके अलावा, !keys %hash बचाया गया है।

तो नहीं, यह जांचने के लिए कोई बेहतर या सुरक्षित तरीका नहीं है कि हैश खाली है या नहीं।

संबंधित मुद्दे