我的模型TicketBuyer列包括ticket_buyer名称和购买的number_of_tickets。我想随机选择一张中奖彩票。我认为我的偏好是创建另一个模型(SelectTable),其中ticket_buyer名称复制的行数等于购买的number_of_tickets,从而赋予每条记录相同的权重。然后我可以运行一个简单的排序并选择新表中的第一条记录。我无法为每个ticket_buyer自动创建具有正确行数的表。当然,也可以采用更有说服力/更有效的方式来做到这一点。建议非常感谢。
答案 0 :(得分:1)
如果速度不是问题,您可以在不创建任何额外数据结构的情况下完成。
除非有一些疯狂的分发,比如一个人购买一百万张门票而其他人都买一张,这不应该花太长时间。
的伪代码:
max_tickets = max(table:number_of_tickets)
while true do:
// select a random buyer
buyer = select random row from table
// assume random(n) returns an integer number from 0 to n - 1 inclusive:
if random(max_tickets) < buyer.number_of_tickets then
return buyer // we have a winner
end