0
我想創建一個數組,其中每個條目應該是一個單獨的,相同的哈希條目在開始。創建一個數組填充單獨的哈希
iTabSize = 500 #protein max lenght
arrTable = Array.new(iTabSize)
hshTable = {"-"=>0,"B"=>0,"Z"=>0,"I"=>0,"M"=>0,"T"=>0,"N"=>0,"K"=>0,"S"=>0,"R"=>0,"V"=>0,"A"=>0,"D"=>0,"E"=>0,"G"=>0,"F"=>0,"L"=>0,"Y"=>0,"X"=>0,"C"=>0,"W"=>0,"P"=>0,"H"=>0,"Q"=>0}
0.upto(iTabSize){|x| arrTable[x]= hshTable}
的問題是如果我改變散列在陣列中的一個條目中,哈希獲取所有其他條目更新:/
arrTable[x][strSeq[x]] = arrTable[x][strSeq[x]] + 1
strSeq是包含從散列字母序列。 結果是arrTable中的每個x都包含完全相同的值?
我用哈希創建數組時做錯了什麼?
我試着用
arrTable = Array.new {Hash.new}
arrTable[x] = Array.new
但它不會改變任何事情! Tnx!
spickermann給了一個很好的答案。問題是'arrTable [x] = hshTable'確保每個數組項都指向同一個對象(散列'hshTable')。你想要的是每個條目都有一個新的對象,它是原始散列的副本。 'hshTable.clone'會給你一個哈希表中的新(克隆)對象。 – SteveTurczyn
這與您的問題無關,但生成'hshTable'的簡單方法是'hshTable [「 - 」,*?A ..?Z] .product([0])。to_h',假設您不關心關於鍵的順序。 –