看起来您需要将一个值(可能取值范围)映射为结果(对上/下限)。它可以是直接lookup table做,如果你有少数可能的值或范围的表二进制搜索:与直接查找范围
完整列表:
int itemCount = 2; // make sure it less than number of elements in ranges.
var random = new Random();
var ranges = new Tuple<int, int>[] {
Tuple.Create(0, 1), // value for 0
Tuple.Create(5, 10), // value for 1 item
Tuple.Create(5, 10), // value for 2 items
Tuple.Create(1, 2), // value for 3 items
};
var value = random.NextDouble() * ranges[itemCount].Item1 +
ranges[itemCount].Item2 - ranges[itemCount].Item1;
其中值的点一览“功能“更改:
int itemCount = 5;
var random = new Random();
var ranges = new Tuple<int, double, double>[] {
Tuple.Create(2, 5.0, 10.0), // value for 0-2 items
Tuple.Create(2, 5.0, 10.0), // value for 2-10 items
Tuple.Create(10, 1.0, 3.0), // value for 10-20 items
Tuple.Create(20, 1.0, 2.0), // value for 20+ items
};
// linear search through table, replace with binary search for 10+ items
var range = ranges[0];
for (var i = 0; i < ranges.Length;i++)
{
if (ranges[i].Item1 >= itemCount)
break;
range = ranges[i];
}
var value = random.NextDouble() * range.Item2 + range.Item3 - range.Item2;
您可以执行'Thread.Sleep((1/NumberOfItems)* SomeMagicNumber)'。 – 2014-09-25 08:25:46
感谢您的帮助阿列克谢。我不确定为什么这是关闭的话题。这是一个真正的问题,我肯定不能成为第一个遇到的问题。列出的原因也是无稽之谈。 – 2014-09-26 00:46:03
@DmitriTrofimov:这不是一个坏主意(减去睡眠部分),谢谢你。 – 2014-09-30 00:00:35