배열로부터 해시 테이블 만들기

Tags:

예를들어,

a=[1,2,3]
b=[4,5,6]

일 때

{1=>4, 2=>5, 3=>6}

과 같이 하려면? 이라는 질문에 comp.lang.ruby에 rober씨가 올린 방법.

 >> require 'enumerator'
=> true
 >> a = [1, 2, 3]
=> [1, 2, 3]
 >> b = ['a', 'b', 'c']
=> ["a", "b", "c"]
 >> a.to_enum(:zip,b).inject({}) {|h,(k,v)| h[k]=v; h}
=> {1=>"a", 2=>"b", 3=>"c"} 

to_enum이 enumerator를 생성하는거고, 어떤 메소드와 인자를 가한 뒤 (여기의 예에서는 b와 zip한 뒤)에 enumerator를 만들 수 있다는 것 다들 아셨는지.. 저는 이런게 되는구나 하고 신기한데;;

Comments

2 responses to “배열로부터 해시 테이블 만들기”

  1. 공성식 Avatar
    공성식

    array 두 개를 zip하면 결과도 array가 되기 때문에 굳이 enumerator가 필요 없을 것 같은데요…

    a.zip(b).inject({}) {|h, (k, v)| h[k]=v; h}

    그냥 이렇게 해도 되잖아요.
    아니면 제가 뭔가를 잘못 이해한 걸까요?
    (만약 그렇다면 죄송…)

    또 다른 방법으로는

    Hash[*a.zip(b).flatten]

    와 같은 것도 될 것 같구요.

  2. MKSeo Avatar
    MKSeo

    네, 말씀하신 내용이 맞아요./
    그냥 뭐랄까 제일 현학적? 이며 미려하게? 보이는 것을 원했거든요.. ㅎㅎ

Leave a Reply

Your email address will not be published. Required fields are marked *