ρουμπίνι one liners να δημιουργήσει hash

20 του Αυγούστου, 2009 από Prashant · Σχόλια
Filed under: Τεχνολογία

Χθες περνώντας από ένα από τα παλαιά προγράμματα μου, βρήκα αυτό που γράφτηκε από εμένα κάποια στιγμή πίσω:

#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 | β = x.split ("=")? b.push (μηδέν) αν b.size == 1? β}
   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 = 9:45:30 10 Ιούλη 2009 PDT", "payment_status = αναμονή »]                                                                         

 IRB (κύριο): 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", "9: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", "9: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" = > "9:45:30 10 Ιουλ 2009 PDT", "protection_eligibility" => "Αποκλεισμός"} 

BTW, * ονομάζεται ράντισμα φορέα στο ρουμπίνι

Ένας άλλος τρόπος για τη δημιουργία κατακερματισμού από «σειρά των ζευγαριών είναι να χρησιμοποιήσετε ένεση:

  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]} 

Μπορείτε να κάνετε περισσότερα πράγματα, κυρίως λόγω του μπλοκ χρησιμοποιείται ως το κλειδί για εκείνο το στοιχείο που προκύπτει στο χασίς.