将元素添加到数组到嵌套循环

时间:2018-07-29 19:12:56

标签: ruby

我试图将元素添加到数组,然后将其推入哈希。我需要以下输出

{:jan=>"jan", :feb=>"jan", :mar=>"jan", :apr=>"jan", :cont=>["j", "a", 
 "n"]}
{:jan=>"feb", :feb=>"feb", :mar=>"feb", :apr=>"feb", :cont=>["f", "e", 
 "b"]}
{:jan=>"mar", :feb=>"mar", :mar=>"mar", :apr=>"mar", :cont=>["m", "a", 
 "r"]}
{:jan=>"apr", :feb=>"apr", :mar=>"apr", :apr=>"apr", :cont=>["a", "p", 
 "r"]}

这是我的代码:

arr = ['jan', 'feb', 'mar', 'apr']
cont = []

arr.each do |f|
 cont.clear
 f.split('').each do |t|
  cont << t
 end

 hash = {jan: f, feb: f, mar: f, apr: f, cont: cont}
 trending_repos.push(hash)
end

puts trending_repos   

在第一个迭代中,它将推送我想在最后看到的数组。输出如下:

{:jan=>"jan", :feb=>"jan", :mar=>"jan", :apr=>"jan", :cont=>["a", "p", 
 "r"]}
{:jan=>"feb", :feb=>"feb", :mar=>"feb", :apr=>"feb", :cont=>["a", "p", 
 "r"]}
{:jan=>"mar", :feb=>"mar", :mar=>"mar", :apr=>"mar", :cont=>["a", "p", 
 "r"]}
{:jan=>"apr", :feb=>"apr", :mar=>"apr", :apr=>"apr", :cont=>["a", "p", 
 "r"]}

2 个答案:

答案 0 :(得分:4)

这就是您要做的一切。

keys = arr.map(&:to_sym)
  #=> [:jan, :feb, :mar, :apr]
arr.map { |s| { **keys.product([s]).to_h, cont: s.chars } }
  #=> [{:jan=>"jan", :feb=>"jan", :mar=>"jan", :apr=>"jan", :cont=>["j", "a", "n"]},
  #    {:jan=>"feb", :feb=>"feb", :mar=>"feb", :apr=>"feb", :cont=>["f", "e", "b"]},
  #    {:jan=>"mar", :feb=>"mar", :mar=>"mar", :apr=>"mar", :cont=>["m", "a", "r"]},
  #    {:jan=>"apr", :feb=>"apr", :mar=>"apr", :apr=>"apr", :cont=>["a", "p", "r"]}] 

请参阅this article,以更好地讨论Ruby的哈希双精度运算符。简而言之,{ **{ a: 1 }, b: 2 } #=> {:a=>1, :b=>2}类似于数组的{@ {1}}单点运算符。

答案 1 :(得分:1)

我已经弄清楚我的代码有什么问题。我需要在第一个循环内移动数组cont的声明。这是正确的代码。

arr = ['jan', 'feb', 'mar', 'apr']

arr.each do |f|
 cont = []
 f.split('').each do |t|
   cont << t
 end

 hash = {jan: f, feb: f, mar: f, apr: f, cont: cont}
 trending_repos.push(hash)
end