2012-06-28 110 views
1

Ruby代碼是:添加到陣列循環

a = [] 
    h = {} 
    2.times.each do |i| 
     %w(a b c).each do |x| 
     h[x] = x + i.to_s 
     end 
     a << h 
    end 

結果是:

a = [{"c"=>"c1", "b"=>"b1", "a"=>"a1"}, {"c"=>"c1", "b"=>"b1", "a"=>"a1"}] 

但我希望的結果是:

a = [{"c"=>"c0", "b"=>"b0", "a"=>"a0"}, {"c"=>"c1", "b"=>"b1", "a"=>"a1"}] 

誰可以幫助me.thx

回答

2

a << h你必須做h = {}。這是因爲您正在爲h分配一個新對象,以便它不覆蓋以前的值。

+0

我知道了,把'h = {}'放到'2.times.each do | i |'是可以的。謝謝 – s6520643

0

[補充回答]您是否熟悉functional programming的原理?

(0..1).map { |n| Hash[("a".."c").map { |c| [c, "#{c}#{n}"] }] } 
#=> {"a"=>"a0", "b"=>"b0", "c"=>"c0"}, {"a"=>"a1", "b"=>"b1", "c"=>"c1"}]