如何以特定概率遍历列表?
How can I traverse a list with specific probability?
假设,我有一个列表:
List<Point2d> listOfCoordinates = new List<Point2d>();
假设,这个列表有 15 个元素。 IE。 listOfCoordinates.Count == 15
.
假设,我想以特定概率打印列表中的项目。 IE。如果我 运行,比如说,1000 次迭代,1st 五个元素应该在 30% 的时间内打印(概率 = 0.30); middle 五个元素应该打印 50% 的时间(概率 = 0.50),last 五个元素应该打印 20% 的时间时间(概率 = 0.20)。
请记住,概率以双精度值存储在 Point2d
class 中。即
class Point2d
{
public double X, Y, Probability;
}
因此,我无法操纵循环语句来实现此目的。
我怎样才能 运行 一个 foreach
循环来实现这个?
假设打印每个 Point2d
是一个独立事件,概率为 Probability
,并且您有一个列表,例如:
var list = new List<Point2d> {
// first 5 all have probability 0.3
new(1, 2, 0.3),
new(3, 4, 0.3),
new(5, 6, 0.3),
new(7, 8, 0.3),
new(9, 10, 0.3),
// middle 5 all have probability 0.5
new(11, 12, 0.5),
new(13, 14, 0.5),
new(15, 16, 0.5),
new(17, 18, 0.5),
new(19, 20, 0.5),
// last 5 all have probability 0.2
new(21, 22, 0.2),
new(23, 24, 0.2),
new(25, 26, 0.2),
new(27, 28, 0.2),
new(29, 30, 0.2)
};
你可以这样打印出来:
void Print(List<Point2d> list, Random random) {
foreach (var point in list) {
if (random.NextDouble() < point.Probability) {
Console.WriteLine(point);
}
}
}
注意NextDouble
returns0(含)和1(不含)之前的值。
进行 1000 次迭代将得到大约 5000 行:
var random = new Random();
for (int i = 0 ; i < 1000 ; i++) {
Print(list, random);
}
假设,我有一个列表:
List<Point2d> listOfCoordinates = new List<Point2d>();
假设,这个列表有 15 个元素。 IE。 listOfCoordinates.Count == 15
.
假设,我想以特定概率打印列表中的项目。 IE。如果我 运行,比如说,1000 次迭代,1st 五个元素应该在 30% 的时间内打印(概率 = 0.30); middle 五个元素应该打印 50% 的时间(概率 = 0.50),last 五个元素应该打印 20% 的时间时间(概率 = 0.20)。
请记住,概率以双精度值存储在 Point2d
class 中。即
class Point2d
{
public double X, Y, Probability;
}
因此,我无法操纵循环语句来实现此目的。
我怎样才能 运行 一个 foreach
循环来实现这个?
假设打印每个 Point2d
是一个独立事件,概率为 Probability
,并且您有一个列表,例如:
var list = new List<Point2d> {
// first 5 all have probability 0.3
new(1, 2, 0.3),
new(3, 4, 0.3),
new(5, 6, 0.3),
new(7, 8, 0.3),
new(9, 10, 0.3),
// middle 5 all have probability 0.5
new(11, 12, 0.5),
new(13, 14, 0.5),
new(15, 16, 0.5),
new(17, 18, 0.5),
new(19, 20, 0.5),
// last 5 all have probability 0.2
new(21, 22, 0.2),
new(23, 24, 0.2),
new(25, 26, 0.2),
new(27, 28, 0.2),
new(29, 30, 0.2)
};
你可以这样打印出来:
void Print(List<Point2d> list, Random random) {
foreach (var point in list) {
if (random.NextDouble() < point.Probability) {
Console.WriteLine(point);
}
}
}
注意NextDouble
returns0(含)和1(不含)之前的值。
进行 1000 次迭代将得到大约 5000 行:
var random = new Random();
for (int i = 0 ; i < 1000 ; i++) {
Print(list, random);
}