我熟悉用于生成值枚举的Enumerable.Range方法。但我想略有不同。我想提供一个最小值,最大值和一些所需的点。
IE:
Method(double min, double max, int numberOfSteps)
取
Method(0, 1000, 11);
将返回
0, 100, 200, 300, 400, 500, 600, 700, 800, 900, 1000
我认为这样的事情,必须有一个内置的方法,但我的搜索没有任何改变。我错过了什么吗?
答案 0 :(得分:27)
除了您希望值为double
之外,其他所有内容都可以使用Enumerable.Range
完成。我不认为有任何内置的东西可以做你想要的,但在Enumerable.Range
之上实现是微不足道的:
return Enumerable.Range(0, steps)
.Select(i => min + (max - min) * ((double)i / (steps - 1)));
我写得有些小心,所以你总是得到最后的价值。如果你说你只需要一个步骤就可以实现bork ...在这种情况下你可能想要防范它并使用Enumerable.Repeat(min, 1)
。
答案 1 :(得分:2)
只需计算'常见差异'&生成系列:
d =(max - min)/(numberOfSteps - 1)
现在,您可以轻松生成系列:
int [] a = new [numberOfSteps];
for(i=0; i<numberOfSteps ; i++)
{
a[i] = min + (numberOfSteps - 1)d;
}