填充数组中的哈希

时间:2014-09-30 15:00:38

标签: ruby arrays ruby-on-rails-3 ruby-on-rails-4 hash

我有这个数组:

params[:types] = [type1, type2, type3...]

我想使用上面的数组以下列方式填充我的哈希:

params[:hash] = { 
               "type1" => {
                   something: something
               },
               "type2" => {
                    something: something
               },
           }

使用像for这样的for index in i ...params[:types]循环只需使用数组中的最后一个值填充哈希值。

3 个答案:

答案 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"}}