2011-09-26 26 views
7

序列我具有以下输入:生成与步长值

double zmin; 
double zmax; 
int count; 
int N; //Total number of element in result array 

我要生成双阵列的与ZMIN序列,作为第一和ZMAX作为最后一个值。但从第二个值直到最后一个,它应该由(zmax-zmin)/ count来增加。

例子:

zmin = 1; 
zmax = 10; 
count = 3 

预期结果:

double[] result = { 1, 4, 7, 10} 

我尝试:

double[] result = Enumerable.Repeat(zmin, N).Select(iv => (iv +(zmax-zmin)/count)).ToArray(); 
+2

这是不是一个错误的描述... –

回答

9
public static IEnumerable<double> Range(double min, double max, double step) 
{ 
    double i; 
    for (i=min; i<=max; i+=step) 
     yield return i; 

    if (i != max+step) // added only because you want max to be returned as last item 
     yield return max; 
} 
+0

***样品使用***? – Kiquenet

0

这个人是不错的不仅是数字,但对于更复杂的类型作为日期/时间。

第二种方法允许提供结果选择器 - 在某些情况下很有用。

public static IEnumerable<TItem> Range<TItem>(
    TItem itemFrom, TItem itemTo, Func<TItem, TItem> itemSelector 
) where TItem : IComparable 
{ 
    // Call to the below method 
    return Range(itemFrom, itemTo, itemSelector, o => o); 
} 

public static IEnumerable<TItem> Range<TItem, TResult>(
    TItem itemFrom, TItem itemTo, Func<TItem, TItem> itemSelector, Func<TItem, TResult> resultSelector 
) where TItem : IComparable 
{ 
    while (true) 
    { 
     yield return resultSelector(itemFrom); 

     if ((itemFrom = itemSelector(itemFrom)).CompareTo(itemTo) > 0) 
      break; 
    } 
} 

用法:

Range(1, 10, o => o + 3); 
1 
4 
7 
10 
Range(
    DateTime.Now, 
    DateTime.Now.AddYears(1), 
    o => o.AddMonths(1), 
    o => o.ToString("MMMM")); 
January 
February 
March 
April 
May 
June 
July 
August 
September 
October 
November 
December 
January