下面的方法随机生成16个骰子中6个骰子的6个边的字母,用于基于letter_frequencies
哈希的Boggle。当代码运行时,它遍历boggle_dice
的第一个元素,一个空数组,用随机字母填充它。
然而,它继续使用第一次迭代来填充boggle_dice
中的其他15个元素,并使用为第一个元素随机选择的相同字母。
造成这种情况的原因是什么,如何改变迭代过程以按预期工作?
在迭代结束时,每个键应出现在boggle_dice
中,其次数等于散列中与其关联的值。
def create_board
letter_frequencies = {
'e' => 10,
'a' => 8,
'i' => 7,
'o' => 6,
'l' => 5,
'n' => 5,
's' => 5,
't' => 5,
'd' => 4,
'r' => 4,
'u' => 4,
'b' => 3,
'c' => 3,
'g' => 3,
'h' => 3,
'm' => 3,
'p' => 3,
'y' => 3,
'f' => 2,
'k' => 2,
'v' => 2,
'w' => 2,
'j' => 1,
'q' => 1,
'x' => 1,
'z' => 1
}
boggle_dice = Array.new(16, [])
boggle_dice.each do |die|
while die.length < 6 do
random_letter = letter_frequencies.keys.sample
letter_frequencies[random_letter] <=0 ? next : die << random_letter
letter_frequencies[random_letter] -= 1
end
end
end
答案 0 :(得分:1)
这是一个常见的初学者的错误。这是因为你做Array.new(16, [])
,重复修改相同的数组。可以通过将其更改为Array.new(16){[]}
来修复它。