mapula isa liners upang lumikha ng hash
Kahapon habang pagpunta sa pamamagitan ng isa sa aking mga lumang programa, natagpuan ko ang isinulat ko minsan likod:
#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
Upang patayin ang ilang ng pananabik hayaan mo akong ibunyag na raw_text Mukhang
, Karapatan ito ay kunin mula sa PayPal pagbabayad pagkilala.
Itaas linya kung nasira sa bahagi bumabasa ng mas mahusay na:
unescaped_array = CGI.unescape (raw_text). split ('&') unescaped_array = unescaped_array.collect {| x | b = x.split ("="); b.push (kawalan) kung sa b.size == 1; b} flattened_array = unescaped_array.flatten hash = Hash [* flattened_array ang]
Hayaan ng mga indibidwal na mga hakbang sa irb:
irb (main): 009:0> unescaped_array = CGI.unescape (raw_text) split ('&') => ["Tagumpay", "mc_gross = 10.00", "protection_eligibility = hindi karapat-dapat", "payer_id = U7PPJJ4TSJ47E", "buwis = 0.00", "payment_date = 09:45:30 Jul 10, 2009 PDT", "payment_status = Nakabinbin "] irb (main): 013:0> unescaped_array = unescaped_array.map {| x | b = x.split ("="); b.push (kawalan) kung sa b.size == 1; b} => [["Tagumpay", wala], [sa "mc_gross", "10.00"], ["protection_eligibility", "hindi karapat-dapat"], ["payer_id", "U7PPJJ4TSJ47E"], ["buwis", "0.00"] , ["payment_date ang", "09:45:30 Jul 10, 2009 PDT"], [ang "payment_status", "Pending"]] irb (main): 014:0> flattened_array = unescaped_array.flatten => ["Tagumpay", wala, "mc_gross", "10.00", "protection_eligibility", "hindi karapat-dapat", "payer_id", "U7PPJJ4TSJ47E", "buwis", "0.00", "payment_date", "09:45: 30 Jul 10, 2009 PDT ", ang" payment_status "," Pending "] irb (main): 015:0> hash = Hash [* flattened_array ang] => {"Buwis" => "0.00", "payment_status" => "Pending", "payer_id" => "U7PPJJ4TSJ47E", sa "mc_gross" => "10.00", "Tagumpay" => wala, "payment_date" = > "09:45:30 Jul 10, 2009 PDT", "protection_eligibility" => "hindi karapat-dapat"}
BTW, * ay tinatawag na splat operator sa rubi
Ang isa pang paraan upang lumikha ng hash mula sa 'array ng pares' ay upang gamitin magpaturok:
hash = [[1,2], [3,4]]-paturukan ({}). {| resulta, elemento | resulta [element.first] = resulta [element.last]; resulta} May isa pang paraan
Magsulat ng isang loop, na kukunin ko na umalis bilang isang ehersisyo sa mga mambabasa!!
Narito ang isang bit hindi kaugnay na kaso ng paggamit ng paglikha ng hash mula sa arrays:
irb (main): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.? : Mas mababang :: mas} => {: Mas mababang => [1, 2, 3, 4],: mas => [7, 9]}
Maaari mong gawin ang higit pang mga bagay, talaga ang resulta ng ang block ay ginagamit bilang ang key para sa na sangkap sa mga nagresultang hash.



































