5

我希望使用这篇文章中提供的答案从列表中随机选择独特的项目。

按照所描述的方法,在我的循环的每次迭代中,我都会生成一个概率值,它是从列表中选择当前项目的百分比机会。

我需要知道的是如何使用这个百分比值来选择项目(或不选择)。

这是我拥有的代码,remainingIndicesList<int>

for (var i = 0; i < remainingIndices.Count; i++)
{
    var probability = pixelsToAdd / (float)(remainingIndices.Count - i);
}

pixelsToAdd是 120 并且remainingIndices.Count是 3600。我开始的概率值是 0.0333333351

该解决方案应该灵活地处理更广泛的值,最好是任何值。

谢谢

评论

对于这个问题的未来读者,我应该澄清一下,起初我认为概率值是介于 0 和 100 之间的某个百分比,但实际上它是介于 0 和 1 之间的值,因此与返回值完美匹配Random.NextDouble(),因此可用于比较,如下面的答案所述。

4

1 回答 1

3

要使用您的概率,请将其与遵循均匀分布的随机变量的样本进行比较[0, 1]

if (Random.NextDouble() <= probability)
    // Take the ith element in the list

你产生的循环将是:

List<???> selectedItems = new List<???>();
for (var i = 0; i < remainingIndices.Count; i++)
{
    var probability = pixelsToAdd / (float)(remainingIndices.Count - i);
    if (Random.NextDouble() <= probability)
    {
        selectedItems.Add(items[i]);
        pixelsToAdd--;
    }
}
于 2013-02-02T21:55:32.657 回答