मैं हैश को कैसे सॉर्ट करूं (वैकल्पिक रूप से कुंजी के बजाय मूल्य से)?
हैश को सॉर्ट करने के लिए, चाबियों से शुरू करें। इस उदाहरण में, हम सॉर्ट फ़ंक्शन को कुंजियों की सूची देते हैं जो तब उन्हें ASCIIBetically तुलना करता है (जो आपकी लोकेल सेटिंग्स से प्रभावित हो सकता है)। आउटपुट सूची में ASCIIBetical ऑर्डर में कुंजी है। एक बार हमारे पास चाबियाँ हो जाने के बाद, हम उन रिपोर्टों को बनाने के लिए जा सकते हैं जो ASCIIBetical ऑर्डर में कुंजी सूचीबद्ध करते हैं।
my @keys = sort { $a cmp $b } keys %hash;
foreach my $key (@keys) {
printf "%-20s %6d\n", $key, $hash{$key};
}
हालांकि हम इस प्रकार() ब्लॉक में अधिक फैंसी प्राप्त कर सकते हैं। चाबियों की तुलना करने के बजाय, हम उनके साथ एक मूल्य की गणना कर सकते हैं और तुलना के रूप में उस मान का उपयोग कर सकते हैं।
उदाहरण के लिए, हमारी रिपोर्ट क्रम केस-संवेदी बनाने के लिए हम उनकी तुलना करने से पहले कुंजी लोअरकेस नियंत्रण रेखा का उपयोग करें:
my @keys = sort { lc $a cmp lc $b } keys %hash;
नोट: यदि गणना महंगा है या हैश कई तत्व है, आप कर सकते हैं गणना परिणामों को कैश करने के लिए श्वार्टज़ियन ट्रांसफॉर्म को देखना चाहते हैं।
यदि हम इसके बजाय हैश मान को सॉर्ट करना चाहते हैं, तो हम इसे देखने के लिए हैश कुंजी का उपयोग करते हैं। हम अभी भी चाबियों की एक सूची प्राप्त करते हैं, लेकिन इस बार उन्हें उनके मूल्य से आदेश दिया जाता है।
my @keys = sort { $hash{$a} <=> $hash{$b} } keys %hash;
वहां से हम और अधिक जटिल हो सकते हैं। यदि हैश मान समान हैं, तो हम हैश कुंजी पर द्वितीयक प्रकार प्रदान कर सकते हैं।
my @keys = sort {
$hash{$a} <=> $hash{$b}
or
"\L$a" cmp "\L$b"
} keys %hash;
स्रोत
2013-07-15 00:10:32
यह आसान था। कभी-कभी उन अच्छे शॉर्टकट्स के साथ आना मुश्किल होता है। धन्यवाद Iikegami। – Moni
आप [पर्ल में सॉर्ट फ़ंक्शन] में अधिक जानकारी देख सकते हैं (http: // stackoverflow।कॉम/प्रश्न/6454744/सॉर्ट-फ़ंक्शन-इन-पर्ल/6454804 # 6454804) –