紅寶石之一客輪創建哈希
昨天,同時通過我的一個老版本的程序中,我發現這個我寫的某個時候回來:
#begin magic
hash=Hash[*CGI.unescape(raw_text).split('&').map{|x| b=x.split("=");b.push(nil) if b.size==1;b}.flatten]
#end magic
要殺死一些懸念,讓我透露,raw_text看起來像
權已被切斷,從 PayPal付款確認。
上面一行,如果在部分打破讀取更好:
分裂('&') unescaped_array = CGI.unescape(raw_text)。 unescaped_array = unescaped_array.collect {| X | B = x.split ("="); b.push(無)如果b.size == 1,B} flattened_array = unescaped_array.flatten 哈希散列[* flattened_array]
讓我們在irb中的各個步驟:
IRB(主):009:0> unescaped_array = CGI.unescape(raw_text)分裂('&') => [“成功”,“mc_gross = 10.00”,“不合格”,“payer_id = U7PPJJ4TSJ47E”,“稅收 protection_eligibility = 0.00”,“payment_date = 2009年07月10日,日9點 45分30秒PDT”,“PAYMENT_STATUS =待定“] IRB(主):013:0> unescaped_array = unescaped_array.map {| X | B = x.split ("="); b.push(無)如果b.size == 1,B} => [“成功”,無],[“mc_gross”,“10.00 "],[" protection_eligibility”,“不合格”],[“payer_id”,“U7PPJJ4TSJ47E”],[“稅”,“0.00”] [“payment_date”,“9點 45分30秒七月10,2009年PDT”],[“PAYMENT_STATUS”,“等待”]] IRB(主):014:0> flattened_array = unescaped_array.flatten => [“成功”,無“mc_gross”,“10.00”,“protection_eligibility”,“不合格”,“payer_id”,“U7PPJJ4TSJ47E”,“稅法”,“0.00”,“payment_date”,“09:45: 30 2009年07月10日,PDT“,”PAYMENT_STATUS“,”待定“] IRB(主):015:0> 哈希散列[* flattened_array] => {“稅”=>“0.00”,“PAYMENT_STATUS”=>“等待”,“payer_id”=>“U7PPJJ4TSJ47E”,“mc_gross”=>“10.00”,“成功”=>零“,payment_date”= >“九時 45分三十秒七月10日,2009年PDT”,“protection_eligibility”=>“不合格”
順便說一句,*被稱為紅寶石圖示運營商
創建“對數組的哈希的另一種方法是使用注:
哈希= [1,2],[3,4]注入({}){|結果,元素|結果 [element.first] =結果 [element.last];結果} 是另一種方式
寫一個循環,我把它留給讀者作為練習!
下面是從數組創建哈希有點不相關的用例:
IRB(主):005:0> [1,2,3,4,7,9] GROUP_BY {| X | X <5? :小:更大的} => {:小=> [1,2,3,4]:更大=> [7,9]}
你可以做更多的事情,基本上塊的結果是產生的雜湊元素的關鍵。



































