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

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 | ب = x.split ("=")؛ b.push (لا شيء) إذا b.size == 1، ب}
   flattened_array = unescaped_array.flatten
   تجزئة التجزئة = [* flattened_array] 

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

  الاتحاد الدولي للرجبي (الرئيسي): 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 = بانتظار "]                                                                         

 الاتحاد الدولي للرجبي (الرئيسي): 013:0> unescaped_array = unescaped_array.map {| X | ب = 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"، "معلق".]]                               

 الاتحاد الدولي للرجبي (الرئيسي): 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 "،" معلق "]
 الاتحاد الدولي للرجبي (الرئيسي): 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]؛ نتيجة} 

هناك أكثر من طريقة :) كتابة حلقة، الذي سأترك باعتبارها ممارسة للقراء!

هنا قليلا حالة الاستخدام لا علاقة لها من خلق التجزئة من المصفوفات:

  الاتحاد الدولي للرجبي (الرئيسي): 005:0> [1،2،3،4،7،9] group_by {| X | X <5.؟  : أقل :: أكبر}

 => {: أقل => [1، 2، 3، 4]،: أكبر => [7، 9]} 

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