רובי 1 ספינות ליצור חשיש
אתמול בשעה עובר אחת מתוכניות הישנים שלי, מצאתי את זה נכתב על ידי לי מתישהו בחזרה:
#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 שהתקבל.



































