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',假设您不关心关于键的顺序。 –