Generate a sequence in steps

I have the following inputs:

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

I want to generate a double array sequence with zmin as first and zmax as last value. But from the second value to the last, except for one, it must be processed (zmax-zmin) / count.

Example:

 zmin = 1; zmax = 10; count = 3 

Expected Result:

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

My attempt:

 double[] result = Enumerable.Repeat(zmin, N).Select(iv => (iv +(zmax-zmin)/count)).ToArray(); 
+7
source share
2 answers
 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; } 
+9
source

This indicator is good not only for numbers, but also for more complex types like date / time.

The second method allows you to provide a selector of results - useful in some cases.

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

Using:

 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 
0
source

All Articles