我是Ruby的新手,并试图找到是否可以创建一个哈希,其密钥为keys_Array,值为val_array。 目前我有以下但它给出了空数组。
key_hash = Hash.new { |hash, key|
hash.key = ["#{csv['values']} #{csv['keys']}"]
}
p key_hash.keys #empty array here
答案 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}