如何将两个数组"压缩"成哈希

Bra*_*riy 17 ruby arrays hashmap

我想将两个数组"压缩"成哈希.

从:

['BO','BR']
['BOLIVIA','BRAZIL']
Run Code Online (Sandbox Code Playgroud)

至:

{BO: 'BOLIVIA', BR:'BRAZIL'}
Run Code Online (Sandbox Code Playgroud)

我该怎么做?

lur*_*ker 30

我会这样做:

keys = ['BO','BR']
values = ['BOLIVIA','BRAZIL']

Hash[keys.zip(values)]
# => {"BO"=>"BOLIVIA", "BR"=>"BRAZIL"}
Run Code Online (Sandbox Code Playgroud)

如果你想要键的符号,那么:

Hash[keys.map(&:to_sym).zip(values)]
# => {:BO=>"BOLIVIA", :BR=>"BRAZIL"}
Run Code Online (Sandbox Code Playgroud)

在Ruby 2.1.0或更高版本中,您可以将它们写为:

keys.zip(values).to_h
keys.map(&:to_sym).zip(values).to_h
Run Code Online (Sandbox Code Playgroud)


Мал*_*евъ 5

只需使用两者中的一个Array,然后将其转置并生成Hash

keys = ['BO','BR']
values = ['BOLIVIA','BRAZIL']
Hash[[keys,values].transpose]
# => {"BO"=>"BOLIVIA", "BR"=>"BRAZIL"}
Run Code Online (Sandbox Code Playgroud)

或新的红宝石版本:

[keys,values].transpose.to_h
Run Code Online (Sandbox Code Playgroud)

  • 出于兴趣,为什么对此不满意?对我来说似乎是一种有效的方法,对于较大的列表,它可能运行缓慢,但效果很好。 (4认同)

Jör*_*tag 5

讽刺的是,如果你只是在问题中加入一些点和下划线,它就会起作用:

我想要“灰zip”中的两个数组to_h

ary1.zip(ary2).to_h
# => { 'BO' => 'BOLIVIA', 'BR' => 'BRAZIL' }
Run Code Online (Sandbox Code Playgroud)

实际上,您在输出哈希中指定键应该是Symbols 而不是Strings,因此我们需要首先转换它们:

ary1.map(&:to_sym).zip(ary2).to_h
# => { BO: 'BOLIVIA', BR: 'BRAZIL' }
Run Code Online (Sandbox Code Playgroud)