2011-09-26 4 views
7

와 시퀀스를 생성 :내가 입력을 다음 한 단계 값

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

내가 마지막 값으로 제 Zmax 순으로는 Zmin 이중 배열의 순서를 생성합니다. 그러나 두 번째 값에서 마지막 값까지 하나씩 (zmax-zmin)/count만큼 steplp되어야합니다.

예 :

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 
관련 문제