рубин један лајнере да створи Хасх

Јуче док пролази кроз један од мојих старих програма, нашао сам ово написао мени негде назад:

#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

Да убију неке од неизвесности дозволите ми да обелодани да рав_тект изгледа

 

, Зар она је смањена са паипал уплате признања.

Изнад линије ако је сломљен у деловима гласи боље:

  унесцапед_арраи = ЦГИ.унесцапе (рав_тект). Сплит ('&')
   унесцапед_арраи унесцапед_арраи.цоллецт = {| к | = Б к.сплит ("="); б.пусх (нула) ако б.сизе == 1, б}
   флаттенед_арраи = унесцапед_арраи.флаттен
   хасх хасх = [* флаттенед_арраи] 

Урадимо појединачне кораке у ИРБ:

  ИРБ (главни). 009:0> унесцапед_арраи = ЦГИ.унесцапе (рав_тект) Сплит ('&')    

 => ["УСПЕХ", "мц_гросс = 10.00", "протецтион_елигибилити = неподобним", "паиер_ид = У7ППЈЈ4ТСЈ47Е", "порез = 0.00", "паимент_дате = 10 Сеп 2009 09:45:30, ПСТ", "паимент_статус = чекању "]                                                                         

 ИРБ (главни): 013:0> унесцапед_арраи унесцапед_арраи.мап = {| к | = Б к.сплит ("="); б.пусх (нула) ако б.сизе == 1, б}  

 => [["УСПЕХ", нула], ["мц_гросс", "10.00"], ["протецтион_елигибилити", "неподобним"], ["паиер_ид", "У7ППЈЈ4ТСЈ47Е"], ["порез", "0.00"] , ["паимент_дате", "10. јул 2009 09:45:30, ПСТ"], ["паимент_статус", "На чекању"]]                               

 ИРБ (главни): 014:0> флаттенед_арраи = унесцапед_арраи.флаттен     

 => ["УСПЕХ" нула ", мц_гросс", "10.00", "протецтион_елигибилити", "неподобним", "паиер_ид", "У7ППЈЈ4ТСЈ47Е", "порез", "0.00", "паимент_дате", "09:45: 30 Јун 10, 2009 ПСТ "," паимент_статус "," На чекању "]
 ИРБ (главни): 015:0>
 хасх хасх = [* флаттенед_арраи]
 => {"Порез" => "0.00", "паимент_статус" => "На чекању", "паиер_ид" => "У7ППЈЈ4ТСЈ47Е", "мц_гросс" => "10.00", "успех" => нула, "паимент_дате" = > "Нов 10 09:45:30, ПСТ 2009", "протецтион_елигибилити" => "неподобним"} 

БТУ, * се зове Сплат оператер у рубином

Други начин за креирање хасх од 'низа парова' је да користите убризгати:

  хасх = [[1,2], [3,4]] убризгати ({}). {| Резултат елемент, | Резултат [елемент.фирст] = резултат [елемент.ласт]; резултат} 

Постоји још један начин :) Написати петљу, да ћу оставити као вежба на читаоце!

Овде је мало везе случај коришћења стварања хасх од низова:

  ИРБ (главни): 005:0> [1,2,3,4,7,9] гроуп_би {| к | к <5.?  : Мање :: већу}

 => {: Мање => [1, 2, 3, 4]: већа => [7, 9]} 

То можете да урадите више ствари, у основи резултат блока се користи као кључ за тај елеменат у добијеном хашиш.