/ / रूबी में हैश में नेस्टेड हैश नहीं - रूबी-ऑन-रेल, सॉर्टिंग, हैश

रूबी में हेश में नेस्टेड हैश को सॉर्ट नहीं करना - रूबी-ऑन-रेल, सॉर्टिंग, हैश

मेरे पास निम्नलिखित हैश है कि मैं रूबी पर रेल में छाँटने की कोशिश कर रहा हूं, जिसमें कोई भाग्य नहीं है

{
"10.0"=>{0=>"Safari", 1=>"10.0", 2=>976, 3=>827, 4=>4997, 5=>311, 6=>731, 7=>173291.0, 8=>0, 9=>48, 10=>6020.0, 11=>116},
"9.0"=>{0=>"Safari", 1=>"9.0", 2=>837, 3=>689, 4=>4574, 5=>233, 6=>610, 7=>192260.0, 8=>0, 9=>49, 10=>6027.0, 11=>113}, "537.0"=>{0=>"Desktop Safari version split", 1=>"537.0", 2=>"56", 3=>"56", 4=>"99", 5=>"37", 6=>"55", 7=>"898.0", 8=>"0", 9=>"0", 10=>"0.0", 11=>"0"},
"8.0"=>{0=>"Safari", 1=>"8.0", 2=>92, 3=>83, 4=>538, 5=>26, 6=>74, 7=>20681.0, 8=>0, 9=>4, 10=>317.0, 11=>8}, "6.0"=>{0=>"Desktop Safari version split", 1=>"6.0", 2=>62, 3=>51, 4=>428, 5=>20, 6=>44, 7=>11954.0, 8=>0, 9=>1, 10=>116.0, 11=>2},
"5.0"=>{0=>"Safari", 1=>"5.0", 2=>48, 3=>41, 4=>259, 5=>16, 6=>35, 7=>9526.0, 8=>0, 9=>1, 10=>120.0, 11=>2},
"534.0"=>{0=>"Safari", 1=>"534.0", 2=>7, 3=>7, 4=>8, 5=>6, 6=>7, 7=>45.0, 8=>0, 9=>0, 10=>0.0, 11=>0},
"538.0"=>{0=>"Safari", 1=>"538.0", 2=>"6", 3=>"6", 4=>"6", 5=>"6", 6=>"6", 7=>"0.0", 8=>"0", 9=>"0", 10=>"0.0", 11=>"0"}, "7.0"=>{0=>"Safari", 1=>"7.0", 2=>20, 3=>15, 4=>99, 5=>4, 6=>13, 7=>4093.0, 8=>0, 9=>0, 10=>0.0, 11=>3},
"4.0"=>{0=>"Safari", 1=>"4.0", 2=>"1", 3=>"1", 4=>"1", 5=>"1", 6=>"1", 7=>"0.0", 8=>"0", 9=>"0", 10=>"0.0", 11=>"0"}, "601.0"=>{0=>"Safari", 1=>"601.0", 2=>"1", 3=>"1", 4=>"1", 5=>"1", 6=>"1", 7=>"0.0", 8=>"0", 9=>"0", 10=>"0.0", 11=>"0"}
}

और मैं चाहता हूं कि उन नेस्टेड हैश को कुंजी 2 से मूल्य पर क्रमबद्ध किया जाए।

मैं निम्नलिखित कोड आज़माता हूं:

hash.sort_by{|k,v|v[2].to_i}

तथा

hash.sort{|a, b| a[2].to_i<=>b[2].to_i;}

लेकिन इन दोनों में "किसी भी चीज़ को छाँटना नहीं है। मैं गलत क्या कर रहा हूँ" मैं नहीं ढूँढ सकता।

उत्तर:

उत्तर № 1 के लिए 1

आपका पहला संस्करण ठीक काम करता है:

hash.sort_by{|k,v| v[2].to_f}

क्या आप सॉर्ट किए गए सरणी का उपयोग करते हैं, या इसे दूसरे चर में सहेजना भूल गए हैं?

यदि आप हैश को स्वयं के सॉर्ट किए गए संस्करण से बदलना चाहते हैं:

hash=hash.sort_by{|k,v|v[2].to_i}.to_h

आपका दूसरा संस्करण:

 hash.sort{|a, b| a[2].to_i<=>b[2].to_i}

doesn "t वर्क क्योंकि a और b नेस्टेड हैश हैं, और एक [2] nil है (कुंजी == 2 के साथ nested_hash नहीं है।) आपको चाहिए:

hash.sort{|(k1,v1), (k2,v2)| v1[2].to_i<=>v2[2].to_i}