数组#每个都没有按预期执行嵌套while循环

时间:2014-03-09 01:09:50

标签: ruby arrays loops collections iteration

下面的方法随机生成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

1 个答案:

答案 0 :(得分:1)

这是一个常见的初学者的错误。这是因为你做Array.new(16, []),重复修改相同的数组。可以通过将其更改为Array.new(16){[]}来修复它。