(如果不写一个大小合适的辅助方法,这可能是不可能的,但无论如何,我想弄清楚)
假设我有一个清单:
{1,3,6}
我想从该列表中获取一个随机项目,但是,我希望它与项目的值直接(概率)加权。因此,如果您运行它 100,000 次,1
将被选中大约 10,000 次,3
将被选中大约 30,000 次,而6
, 将被选中 60,000 次。
我可以通过创建这样的范围来编写一个辅助方法:
{1,3,6}
Generate random number between 1(inclusive) and 11(exclusive) (sum of list)
if (number == 0)
{
//1
}
else if (number > 0 && number < 4)
{
//3
}
else
{
//6
}
虽然那个特定的例子相当简单,但我经常使用大型列表,它们总是不同的,所以它会更复杂一些。虽然我可以做到,但我很好奇是否有更简单的方法。