我有这个数组:
params[:types] = [type1, type2, type3...]
我想使用上面的数组以下列方式填充我的哈希:
params[:hash] = {
"type1" => {
something: something
},
"type2" => {
something: something
},
}
使用像for
这样的for index in i ...params[:types]
循环只需使用数组中的最后一个值填充哈希值。
答案 0 :(得分:3)
您可以使用each_with_object
方法执行此操作:
params = {}
params[:types] = ["type1", "type2", "type3"]
params[:types].each_with_object({}) { |k, h| h[k] = { "something" => "something" } }
最后一行将返回:
=> {"type1"=>{"something"=>"something"}, "type2"=>{"something"=>"something"}, "type3"=>{"something"=>"something"}}
答案 1 :(得分:1)
这是一个代码片段示例,可以满足您的需求。
hash = {}
array.each do |a|
hash[a.to_s] = { "something" => "something" }
end
输出:
hash
=> {
"type1" => {
"something" => "something"
},
"type2" => {
"something" => "something"
},
"type3" => {
"something" => "something"
}
}
答案 2 :(得分:0)
你可以这样做:
params = { types: ["type1", "type2", "type3"] }
Hash[params[:types].product([{"something" => "something"}])]
#=> {"type1"=>{"something"=>"something"},
# "type2"=>{"something"=>"something"},
# "type3"=>{"something"=>"something"}}
或使用Ruby 2.1,
params[:types].product([{"something" => "something"}]).to_h
如果您想为params[:types]
的每个元素添加不同的哈希:
hashes = [{ "something1"=>"something1" }, { "something2"=>"something2" },
{ "something3"=>"something3" }]
然后
Hash[params[:types].zip(hashes)]
#=> {"type1"=>{"something1"=>"something1"},
# "type2"=>{"something2"=>"something2"},
# "type3"=>{"something3"=>"something3"}}