Arrayの初期化

こうすると

#!/usr/bin/env ruby
require 'rubygems'
require 'pp'

arr = Array.new(10, Hash.new)

i=0
arr.each{|h|
  h["num"] = i
  h["test"] = "test" if i == 5
  i+=1
}

pp arr

同じHashが全要素に入るのでこうなる

[{"num"=>9, "test"=>"test"},
 {"num"=>9, "test"=>"test"},
 {"num"=>9, "test"=>"test"},
 {"num"=>9, "test"=>"test"},
 {"num"=>9, "test"=>"test"},
 {"num"=>9, "test"=>"test"},
 {"num"=>9, "test"=>"test"},
 {"num"=>9, "test"=>"test"},
 {"num"=>9, "test"=>"test"},
 {"num"=>9, "test"=>"test"}]


こうするんだった

#!/usr/bin/env ruby
require 'rubygems'
require 'pp'

#arr = Array.new(10, Hash.new)
arr = Array.new
10.times do arr << Hash.new end

i=0
arr.each{|h|
  h["num"] = i
  h["test"] = "test" if i == 5
  i+=1
}

pp arr


ok

[{"num"=>0},
 {"num"=>1},
 {"num"=>2},
 {"num"=>3},
 {"num"=>4},
 {"num"=>5, "test"=>"test"},
 {"num"=>6},
 {"num"=>7},
 {"num"=>8},
 {"num"=>9}]