我熟悉用于生成值枚举的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
我想这样的事情,必须有一个内置的方法,但我的搜索没有发现任何东西。我错过了什么吗?
我熟悉用于生成值枚举的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
我想这样的事情,必须有一个内置的方法,但我的搜索没有发现任何东西。我错过了什么吗?
除了您希望这些值成为事实之外,其他double
一切都可以完成Enumerable.Range
。我不认为有任何内置的东西可以做你想做的事,但是在上面实现是微不足道的Enumerable.Range
:
return Enumerable.Range(0, steps)
.Select(i => min + (max - min) * ((double)i / (steps - 1)));
我写得有点仔细,所以你总是得到最终的价值。如果你说你只想要一个步骤,它确实很糟糕......你可能想要防止这种情况并Enumerable.Repeat(min, 1)
在这种情况下使用。
只需计算“共同差异”并生成系列:
d = (max - min)/(numberOfSteps - 1)
现在,您可以轻松地生成您的系列:
int [] a = new [numberOfSteps];
for(i=0; i<numberOfSteps ; i++)
{
a[i] = min + (numberOfSteps - 1)d;
}