我试图将元素添加到数组,然后将其推入哈希。我需要以下输出
{: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"]}
答案 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