روبي one المتشددين لإنشاء التجزئة

20 أغسطس 2009 بواسطة براشانت · تعليقات
قدم تحت : التكنولوجيا

بالأمس وجدت في حين يمر بي أحد البرامج القديمة ، وهذا الذي كتبه لي عودة في وقت ما :

#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

 

والحق أنه قد تم قطع من اعتراف الدفع باي بال.

فوق خط إذا ما تم كسره في أجزاء يقرأ بشكل أفضل :

  انقسام unescaped_array = CGI.unescape (raw_text). ('&')
   unescaped_array unescaped_array.collect = {| س | ب = x.split ("=")؛b.push (لا شيء) إذا b.size == 1 ، ب}
   flattened_array = unescaped_array.flatten
   هاش هاش = [* flattened_array] 

دعونا نفعل الخطوات الفردية في مجلس الهجرة واللاجئين :

  IRB (الرئيسي) : 009:0> unescaped_array = CGI.unescape (raw_text) تقسيم ('&')    

 => ["نجاح" ، "mc_gross = 10،00" ، "غير مؤهل protection_eligibility =" ، "payer_id = U7PPJJ4TSJ47E" ، "الضريبة = 0.00" ، "09:45:30 payment_date = 10 يوليو 2009 PDT" ، "ريثما payment_status = "]                                                                         

 IRB (الرئيسي) : 013:0> unescaped_array unescaped_array.map = {| س | ب = x.split ("=")؛b.push (لا شيء) إذا b.size == 1 ، ب}  

 => [["نجاح" ، لا شيء] ، ["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>
 هاش هاش = [* flattened_array]
 => {"ضريبة" => "0.00" ، "payment_status" => "معلق" ، "payer_id" => "U7PPJJ4TSJ47E" ، "mc_gross" => "10،00" ، "نجاح" => لا شيء "، payment_date" = > "09:45:30 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]} 

يمكنك أن تفعل أشياء أكثر ، ويستخدم أساسا نتيجة للكتلة كمفتاح لهذا العنصر في التجزئة الناتجة عن ذلك.