使用给定的步数获取给定最小值和最大值的可枚举范围

时间:2012-09-13 14:05:09

标签: c# winforms range

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

我认为这样的事情,必须有一个内置的方法,但我的搜索没有任何改变。我错过了什么吗?

2 个答案:

答案 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;
}