perlfaq4 से, "http://faq.perl.org/perlfaq4.html#How_do_I_sort_a_hash" का जवाब जानकारी आप एक साथ अपने कोड रखना होगा के सबसे है।
आप सीखना पर्ल में सॉर्टिंग पर अध्याय देखना भी चाहेंगे।
क्रिस का एक बिल्कुल अच्छा जवाब है, हालांकि मुझे values
का उपयोग करने से नफरत है। एक ही बात करने के लिए एक और अधिक परिचित रास्ता शीर्ष स्तर के हैश की चाबी के माध्यम से लेकिन प्रकार दूसरे स्तर के प्रमुख द्वारा जाने के लिए है:
my @sorted_hashes =
sort { $hash2->{$a}{count} <=> $hash2->{$b}{count} }
keys %hash2;
मैं इसे इस तरह से करना क्योंकि यह थोड़ा कम दिमाग झुकने ।
मैं हैश को कैसे क्रमबद्ध करूं (वैकल्पिक रूप से कुंजी के बजाय मूल्य से)?
(ब्रायन डी Foy के योगदान)
एक हैश क्रमबद्ध करने के लिए, कुंजी के साथ शुरू करते हैं। इस उदाहरण में, हम सॉर्ट फ़ंक्शन को कुंजियों की सूची देते हैं जो तब उन्हें ASCIIBetically तुलना करता है (जो आपकी लोकेल सेटिंग्स से प्रभावित हो सकता है)। आउटपुट सूची में ASCIIBetical ऑर्डर में कुंजी है। एक बार हमारे पास चाबियाँ हो जाने के बाद, हम उन रिपोर्टों को बनाने के लिए जा सकते हैं जो ASCIIBetical ऑर्डर में कुंजी सूचीबद्ध करते हैं।
my @keys = sort { $a cmp $b } keys %hash;
foreach my $key (@keys)
{
printf "%-20s %6d\n", $key, $hash{$key};
}
हालांकि हम इस प्रकार() ब्लॉक में अधिक फैंसी प्राप्त कर सकते हैं। चाबियों की तुलना करने के बजाय, हम उनके साथ एक मूल्य की गणना कर सकते हैं और तुलना के रूप में उस मान का उपयोग कर सकते हैं।
उदाहरण के लिए, हमारे रिपोर्ट ऑर्डर केस-असंवेदनशील बनाने के लिए, हम सब कुछ लोअरकेस बनाने के लिए \ l अनुक्रम को डबल-उद्धृत स्ट्रिंग में उपयोग करते हैं। सॉर्ट() ब्लॉक तब निम्न निर्धारित मानों की तुलना करता है ताकि यह निर्धारित किया जा सके कि कुंजी को किस क्रम में रखा जाए।
my @keys = sort { "\L$a" cmp "\L$b" } keys %hash;
नोट: यदि गणना महंगा है या हैश कई तत्व है, तो आप Schwartzian पर परिकलन परिणाम कैश करने के लिए रूपांतरण देखने के लिए चाहते हो सकता है।
यदि हम इसके बजाय हैश मान को सॉर्ट करना चाहते हैं, तो हम इसे देखने के लिए हैश कुंजी का उपयोग करते हैं। हम अभी भी चाबियों की एक सूची प्राप्त करते हैं, लेकिन इस बार उन्हें उनके मूल्य से आदेश दिया जाता है।
my @keys = sort { $hash{$a} <=> $hash{$b} } keys %hash;
वहां से हम और अधिक जटिल हो सकता है। यदि हैश मान समान हैं, तो हम हैश कुंजी पर द्वितीयक प्रकार प्रदान कर सकते हैं।
my @keys = sort {
$hash{$a} <=> $hash{$b}
or
"\L$a" cmp "\L$b"
} keys %hash;
आप मतलब है कि आप हैश (hash1 की तरह) hash2 में मूल्यों से गिनती के अनुसार क्रमबद्ध की सूची प्राप्त करना चाहते हैं? – Jagmal
हां जगमल का मतलब है कि मैं $ हैश 2 {"asd"} {count} के संबंध में सॉर्ट करना चाहता हूं। – systemsfault