ρουμπίνι one liners να δημιουργήσει hash
Χθες περνώντας από ένα από τα παλαιά προγράμματα μου, βρήκα αυτό που γράφτηκε από εμένα κάποια στιγμή πίσω:
#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]}
Μπορείτε να κάνετε περισσότερα πράγματα, κυρίως λόγω του μπλοκ χρησιμοποιείται ως το κλειδί για εκείνο το στοιχείο που προκύπτει στο χασίς.



































