16

我熟悉用于生成值枚举的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

我想这样的事情,必须有一个内置的方法,但我的搜索没有发现任何东西。我错过了什么吗?

4

2 回答 2

32

除了您希望这些值成为事实之外,其他double一切都可以完成Enumerable.Range。我不认为有任何内置的东西可以做你想做的事,但是在上面实现是微不足道的Enumerable.Range

return Enumerable.Range(0, steps)
                 .Select(i => min + (max - min) * ((double)i / (steps - 1)));

我写得有点仔细,所以你总是得到最终的价值。如果你说你只想要一个步骤,它确实很糟糕......你可能想要防止这种情况并Enumerable.Repeat(min, 1)在这种情况下使用。

于 2012-09-13T14:08:18.453 回答
3

只需计算“共同差异”并生成系列:

d = (max - min)/(numberOfSteps - 1)

现在,您可以轻松地生成您的系列:

int [] a = new [numberOfSteps];

for(i=0; i<numberOfSteps ; i++)
{
  a[i] = min + (numberOfSteps - 1)d;
}
于 2012-09-13T14:19:23.790 回答