我想創建哈希像這樣的數組:循環和附加散列到一個數組
[
{"start"=>1, "end"=>2},
{"start"=>2, "end"=>3},
{"start"=>3, "end"=>4},
{"start"=>4, "end"=>5},
{"start"=>5, "end"=>6}
]
當我嘗試此代碼:
foo = 1
bar = 2
hash = {}
array = []
5.times do
hash['start'] = foo
hash['end'] = bar
array << hash
foo += 1
bar += 1
end
的hash
值內array
改變而循環和哈希值被添加到它。 array
變爲:
[
{"start"=>5, "end"=>6},
{"start"=>5, "end"=>6},
{"start"=>5, "end"=>6},
{"start"=>5, "end"=>6},
{"start"=>5, "end"=>6}
]
爲什麼會發生這種情況時:
foo = 1
array = []
5.times do
array << foo
foo += 1
end
array # => [1, 2, 3, 4, 5]
不會在循環過程中改變內部array
數字?
使用'陣列<< hash.dup',而不是'因爲你陣列<< hash'」這裏添加的只是散列引用,而不是散列本身。 –
我會使用'(1..6).each_cons(2).map {| a,b | {start:a,end:b}}' – Stefan