Ruby - 使用键和值作为数组创建哈希

时间:2018-04-18 04:46:37

标签: ruby-on-rails ruby ruby-on-rails-3

我是Ruby的新手,并试图找到是否可以创建一个哈希,其密钥为keys_Array,值为val_array。 目前我有以下但它给出了空数组。

key_hash = Hash.new { |hash, key| 
     hash.key = ["#{csv['values']} #{csv['keys']}"]
}
p key_hash.keys #empty array here

2 个答案:

答案 0 :(得分:3)

如果你想从两个哈希中创建一个新的哈希值(一个包含新哈希的键,另一个包含与第一个哈希中的键相关的值) 你可以使用下面的东西:

keys = ['k1', 'k2', 'k3']
values = ['b1', 'b2']
h = {}

keys.zip(values) { |a,b| h[a.to_sym] = b } 
# => nil

p h 
# => {:k1=>"b1", :k2=>"b2", :k3=>nil}

请记住,如果密钥更多且值的数量更少,那么密钥将具有零值,如在例如但是如果密钥与值相比较小,那么它现在将考虑剩下的值,例如,

keys =['b1', 'b2']
=> ["b1", "b2"]
values = ['k1', 'k2', 'k3']
=> ["k1", "k2", "k3"]
h = {}
=> {}
keys.zip(values) { |a,b| h[a.to_sym] = b } 
=> nil
p h 
{:b1=>"k1", :b2=>"k2"}

答案 1 :(得分:0)

如果您尝试从两个对应的数组中为键和值创建哈希,这是一种快捷方法:

keys = ["a", "b", "c"]
values = [1, 2, 3]
hash = Hash[keys.zip(values)] 
# => {"a"=>1, "b"=>2, "c"=>3}

# for symbols
hash = Hash[keys.map(&:to_sym).zip(values)] 
# => {:a=>1, :b=>2, :c=>3}