ruby 1 podlage za oblikovanje hash
Včeraj, ko je šel skozi enega od mojih starih programov, sem našel to napisal me kdaj nazaj:
#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
Da bi ubil nekaj napetosti naj razkrije, da raw_text izgleda
, Desno je bilo izrezano iz paypal potrditvi plačila.
Nad črto, če razdeljene v dele bere bolje:
unescaped_array = CGI.unescape (raw_text). split ("&") unescaped_array = unescaped_array.collect {| x | b = x.split ("="); b.push (nič), če b.size == 1, b} flattened_array = unescaped_array.flatten hash = Hash [* flattened_array]
Naredimo posamezne korake v pristopu IRB:
IRB (glavni). 009:0> unescaped_array = CGI.unescape (raw_text) split ("&") => ["Uspeh", "mc_gross = 10,00", "protection_eligibility = Neupravičeni", "payer_id = U7PPJJ4TSJ47E", "taksa = 0,00", "payment_date = 09:45:30 10 julij 2009 PDT", "= Do payment_status "] IRB (glavna): 013:0> unescaped_array = unescaped_array.map {| x | b = x.split ("="); b.push (nič), če b.size == 1, b} => [["Uspeh", nič], ["mc_gross", "10,00"] ["protection_eligibility", "Neupravičeni"] ["payer_id", "U7PPJJ4TSJ47E"] ["davek", "0,00"] ["payment_date", "09:45:30 10. julij 2009 PDT"] ["payment_status", "Do"]] IRB (glavna): 014:0> flattened_array = unescaped_array.flatten => ["Uspeh," je nič, "mc_gross", "10,00", "protection_eligibility", "Neupravičeni", "payer_id", "U7PPJJ4TSJ47E", "davek", "0,00", "payment_date", "09:45: 30 10. julij 2009 PDT "," payment_status "," Do "] IRB (glavna): 015:0> hash = Hash [* flattened_array] => {"Davek" => "0,00", "payment_status" => "Do", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10,00", "SUCCESS" => nič, "payment_date" = > "09:45:30 10 julij 2009 PDT", "protection_eligibility" => "Neupravičeni"}
BTW, se imenuje * Hlajenje operater v Ruby
Drug način za ustvarjanje hašiš iz 'paleto parov' je uporaba injicirati:
hash = [[1,2], [3,4]] injekcijo ({}). {| rezultat, element | Rezultat [element.first] = rezultat [element.last]; rezultat} Obstaja še en način
Napiši zanko, da bom zapustiti kot uresničevanje z bralci!
Tukaj je nekoliko povezano primerov uporabe za ustvarjanje haše od polja:
IRB (glavna): 005:0> [1,2,3,4,7,9] group_by {| x | x <5.? : Manj :: večja} => {: Manj => [1, 2, 3, 4]: več => [7, 9]}
To lahko storite več stvari, v bistvu je rezultat bloka uporablja kot ključ za ta element, ki izhaja hash.



































