רובי 1 ספינות ליצור חשיש

20 אוגוסט 2009 על ידי Prashant · תגובות
מתויק תחת: טכנולוגיה

אתמול בשעה עובר אחת מתוכניות הישנים שלי, מצאתי את זה נכתב על ידי לי מתישהו בחזרה:

#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
   hash = Hash [* flattened_array] 

בוא לעשות צעדים בודדים IRB:

  IRB (ראשי):. 009:0> unescaped_array = CGI.unescape (raw_text) מפוצל ("&")    

 => ["הצלחה", "mc_gross = 10.00", "protection_eligibility = כשיר", "payer_id = U7PPJJ4TSJ47E", "מס = 0.00", "payment_date = 09:45:30 10 יולי 2009 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", "09: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 יולי 10, 2009 PDT "," payment_status "," בהמתנה "]
 IRB (ראשי): 015:0>
 hash = Hash [* flattened_array]
 => {"מס" => "0.00", "payment_status" => "בהמתנה", "payer_id" => "U7PPJJ4TSJ47E", "mc_gross" => "10.00", "הצלחה" => אפסי ", payment_date" = > "09:45:30 10 יולי 2009 PDT", "protection_eligibility" => "כשיר"} 

אגב, * נקרא מפעיל מעיכה של רובי

דרך נוספת ליצור חשיש מ 'מערך של זוגות "הוא להשתמש להזריק:

  hash = [[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]} 

אתה יכול לעשות עוד דברים, בעצם תוצאה של בלוק משמש כמפתח עבור אלמנט כי hash שהתקבל.