ruby on rails-组合4个数组,在一个散列中创建一个散列



我有以下数组

campaign_names = ["Air Duct Cleaning", "Carpet Cleaning", "Brand Terms", "Upholstery Cleaning"]
impressions = ["358", "1404", "1853", "184"]
clicks = ["3", "6", "53", "0"]
conversions = ["0", "0", "2", "0"]

我想在哈希中创建一个哈希,这样campaign_names元素就是嵌套的哈希,印象、点击和转换就是其中的键,值就是每个的数组元素所需输出为-

Hash = {:Air_Duct_Cleaning => { :impressions => "358", :clicks => "3", :conversions => "0" }, :Carpet_Cleaning => { :impressions => "1404", :clicks => "6", :conversions => "0" }, :Brand_Terms => { :impressions => "1853", :clicks => "53", :conversions => "2" }, :Upholstery_Cleaning => { :impressions => "184", :clicks => "0", :conversions => "0" }}

我一直在尝试使用#zip来组合它们,然后我希望使用Hash[],但最终得到了一个空哈希(似乎我只能用2个数组(

zipped = campaign_names.zip(impressions, clicks, conversions)
=> [["Air Duct Cleaning", "358", "3", "0"], ["Carpet Cleaning", "1404", "6", "0"], ["Brand Terms", "1853", "53", "2"], ["Upholstery Cleaning", "184", "0", "0"]]
final_hash = Hash[zipped]
=> {}

然后我尝试使用#each_with_index,但我得到的输出只是我在上调用的数组

hash = {}
campaign_names.each_with_index { |key, index| hash[key] = values[index] }
=> ["Air Duct Cleaning", "Carpet Cleaning", "Brand Terms", "Upholstery Cleaning"]
hash = {}
campaign_names.each_with_index { |e,i|
    hash[e.gsub(' ','_').to_sym] = {impressions: impressions[i], clicks: clicks[i], conversations: conversions[i]}
}
campaign_names.zip(impressions, clicks, conversions)
.map{|k, v1, v2, v3| [
  k.gsub(" ", "_").to_sym,
  {impressions: v1, clicks: v2, conversions: v3}
]}.to_h

结果:

{
  :Air_Duct_Cleaning   => {
    :impressions => "358",
    :clicks      => "3",
    :conversions => "0"
  },
  :Carpet_Cleaning     => {
    :impressions => "1404",
    :clicks      => "6",
    :conversions => "0"
  },
  :Brand_Terms         => {
    :impressions => "1853",
    :clicks      => "53",
    :conversions => "2"
  },
  :Upholstery_Cleaning => {
    :impressions => "184",
    :clicks      => "0",
    :conversions => "0"
  }
}

只是为了好玩:

campaign_names.zip(1..campaign_names.size)
  .map{ |x,y| 
        { x => { impressions: impressions[y-1], 
                 clicks: clicks [y-1], 
                 conversions: conversions[y-1] 
               } 
        }
  }.inject("merge")

我认为你和你的每一个都很接近_带索引

这对我有效…

hash = {}
campaign_names.each_with_index { |c,index| hash[c] = { impressions: impressions[index],      clicks: clicks[index], conversions: conversions[index] }}

请注意,这会返回campaign_names数组,但您应该会发现hash将根据需要进行填充。

只是为了与众不同,不使用each_with:

hash = {}
campaign_names.length.times do |index| 
    hash[campaign_names[index].gsub(/s/, '_')] = {
      impressions: impressions[index],
      clicks: clicks[index], 
      conversions: conversions[index]
    } 
end
> hash
=> {"Air_Duct_Cleaning"=>{:impressions=>"358", :clicks=>"3", :conversions=>"0"},
    "Carpet_Cleaning"=>{:impressions=>"1404", :clicks=>"6", :conversions=>"0"},
    "Brand_Terms"=>{:impressions=>"1853", :clicks=>"53", :conversions=>"2"},
    "Upholstery_Cleaning"=>{:impressions=>"184", :clicks=>"0", :conversions=>"0"}}

最新更新