【发布时间】:2014-03-09 01:09:50
【问题描述】:
下面的方法根据letter_frequencies 散列随机生成用于 Boggle 的 16 个骰子中每一个的 6 个面的字母。当代码运行时,它遍历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
【问题讨论】:
标签: ruby arrays loops collections iteration