-2
配列のハッシュを作成したいと思います。作成したオブジェクト間のリンクを解除する方法
私が行う場合は、この:
res = Hash[(1..5).zip Array.new(5, [])]
私は、結果としてこれを取得します:
{1=>[], 2=>[], 3=>[], 4=>[], 5=>[]}
それは大丈夫です。しかし、私がこの配列の1つを変更しようとすると、Rubyはそれらをすべて変更します。それはOKではありません。
私はこれを行う場合は、次の
res[1] << 1
私は、結果としてこれを取得します:
{1=>[1], 2=>[1], 3=>[1], 4=>[1], 5=>[1]}
私はのように、他の変異体を使用しようとしていた。
res = Hash[(1..5).zip Array.new(5, Array.new)]
res = Hash[(1..5).zip Array.new(5, [].dup)]
res = Hash[(1..5).zip Array.new(5, [].clone)]
res = Hash[(1..5).zip Array.new(5, []).clone]
しかし、彼らは与えました私は同じ結果です。
なぜですか?
'RES =ハッシュ[(1..5)の.zip 5.times.map {[]}]' ' – mudasobwa
のRES = Hash.new {:各アレイは、異なる物体であろうk | h [k] = [] if(1..5)=== k} 'はあなたが望むものを達成するための最良の方法です。 – mudasobwa
この正確な問題とその解決方法は、 'Array :: new'といくつかの既存の[so]質問と回答のドキュメントでカバーされています。 –