更新:我的问题已经解决,我在我的问题中更新了代码源以匹配Jason的答案.请注意,rikitikitik的答案是解决从更换样品中挑选卡片的问题.
我想从加权列表中选择x个随机元素.取样无需更换.我找到了这个答案:https://stackoverflow.com/a/2149533/57369,带有Python实现.我在C#中实现了它并进行了测试.但结果(如下所述)与我的预期不符.我不了解Python,所以我很确定在将代码移植到C#时犯了一个错误,但是我无法看到Pythong中的代码在哪里得到了很好的记录.
我选了一张卡10000次,这是我获得的结果(结果是一致的执行):
Card 1: 18.25 % (10.00 % expected)
Card 2: 26.85 % (30.00 % expected)
Card 3: 46.22 % (50.00 % expected)
Card 4: 8.68 % (10.00 % expected)
Run Code Online (Sandbox Code Playgroud)
正如你所看到的,卡1和卡4的重量均为1,但是卡1比卡4更经常被选中(即使我选择了2或3张卡).
测试数据:
var cards = new List<Card>
{
new Card { Id = 1, AttributionRate = 1 }, // 10 %
new Card { Id = 2, AttributionRate = 3 }, // 30 %
new Card { Id = 3, AttributionRate = 5 }, …Run Code Online (Sandbox Code Playgroud)