Ruby - 使用键和值作为数组创建散列
Ruby - Create hash with keys and values as arrays
我是 Ruby 的新手,正在尝试寻找是否可以创建一个散列,其键为 keys_Array,值为 val_array。
目前我有以下内容,但它给出了空数组。
key_hash = Hash.new { |hash, key|
hash.key = ["#{csv['values']} #{csv['keys']}"]
}
p key_hash.keys #empty array here
如果你想从两个散列中创建一个新的散列(一个包含新散列的键,另一个包含与第一个散列中的键相关的值)
你可以使用类似下面的东西:
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}
请记住,如果键的数量更多而值的数量更少,那么键将具有 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"}
如果您尝试从两个对应的键和值数组创建散列,这是一种快速的方法:
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}
我是 Ruby 的新手,正在尝试寻找是否可以创建一个散列,其键为 keys_Array,值为 val_array。 目前我有以下内容,但它给出了空数组。
key_hash = Hash.new { |hash, key|
hash.key = ["#{csv['values']} #{csv['keys']}"]
}
p key_hash.keys #empty array here
如果你想从两个散列中创建一个新的散列(一个包含新散列的键,另一个包含与第一个散列中的键相关的值) 你可以使用类似下面的东西:
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}
请记住,如果键的数量更多而值的数量更少,那么键将具有 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"}
如果您尝试从两个对应的键和值数组创建散列,这是一种快速的方法:
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}