像往常一样,输入我的问题的行为让我停下来思考实际发生了什么。
从根本上说,数组只包含所需平均延迟的下限和上限。如果期望的平均值为2.25,则最终的数组将是2和3的某种组合,但绝不是1或4。一旦我意识到这一点,它似乎很简单,天花板和地板的数量与所需的延迟距离天花板/地板的距离成正比。换句话说,2.25需要一个75%2和25%3的数组。简单!
以下是我最终得到的(Elixir):
def generate_step_delays(steps, desired_delay) do
desired_delay_ceil = ceil(desired_delay)
desired_delay_floor = floor(desired_delay)
# The ratio of ceils to floors needed
ratio = desired_delay - desired_delay_floor
ceil_list = List.duplicate(desired_delay_ceil, round(steps * ratio))
floor_list = List.duplicate(desired_delay_floor, steps - length(ceil_list))
ceil_list
|> Enum.concat(floor_list)
|> Enum.shuffle()
end
此实现将最终数组随机化,因为这对我的情况最有效。然而,换掉它很容易
Enum.shuffle
如果需要,可以均匀地分配数字。