红宝石1层,创建哈希

2009年8月20日, prashant
提起下: 技术

昨天,同时通过我的老节目之一,我发现我写的一段时间回来:

#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 | B = x.split(“=”); b.push(零)如果b.size == 1;}
   flattened_array = unescaped_array.flatten
  哈希散列[* 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秒2009年07月10日,PDT”,“PAYMENT_STATUS =待定“]                                                                         

 IRB(主):013:0> unescaped_array = unescaped_array.map {| X | B = x.split(“=”); b.push(零)如果b.size == 1;}  

 => [“侨”,无],[的“mc_gross”,“10.00”],[“protection_eligibility”,“不合格”,“payer_id”,“U7PPJJ4TSJ47E”],[“税收”,“0.00”] [“payment_date”,“9点45分30秒7月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日2009年07月10日,PDT“,”PAYMENT_STATUS“,”待定“]
 IRB(主):015:0>
哈希散列[* flattened_array]
 => {“税”=>“0.00”,“PAYMENT_STATUS”=>“挂起”,“payer_id”=>“U7PPJJ4TSJ47E”,“mc_gross”=>“10.00”,“成功”=>“零”payment_date“= “九时45分三十秒07月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]} 

你可以做更多的事情,基本上块的结果作为使用中产生的哈希元素的关键。

评论

    博客评论由Disqus