해시 만들 루비 한 라이너

에 의한 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가 어떻게 생겼다고 공개하자

 

, 바로 그것은 페이팔 지불 확인서에서 해고되었습니다.

라인 위에 부품에서 깨지면 더 읽습니다 :

  unescaped_array = CGI.unescape (raw_text). 분할 ( '&')
   unescaped_array = unescaped_array.collect {| X | B = x.split ( "="); b.push (전무) b.size == 1면; B}
   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년 7월 10일 PDT", "payment_status는 = 보류 중 "]                                                                         

 irb (주) : 013:0> unescaped_array = unescaped_array.map {| X | B = x.split ( "="); b.push (전무) b.size == 1면; B}  

 => [[ "성공", 전무], [ "mc_gross", "10.00"] [ "protection_eligibility", "부적합"] [ "payer_id", "U7PPJJ4TSJ47E"] [ "세금", "0.00"] , [ "payment_date", "9시 45분 30초 2009년 7월 10일 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분 : 7월 30일 10, 태평양 서머 타임 20시 09분 ","payment_status ","보류 중 "]
 irb (주) : 015:0>
 해시 = 해시 [* flattened_array]
 => { "세금"=> "0.00", "payment_status"=> "보류 중" "payer_id"=> "U7PPJJ4TSJ47E", "mc_gross"=> "10.00", "성공"=> 전무, "payment_date"= }> "9시 45분 30초 2009년 7월 10일 PDT", "protection_eligibility"=> "부적합" 

BTW, *는 루비의 표시와 연산자라고합니다

'쌍 배열'에서 해시 만드는 또 다른 방법은 주사를 사용하는 것입니다 :

  해시 = [[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에 의해 전원 블로그 덧글