2012-05-07 5 views
0

私は列挙可能な範囲を持っていましたが、最初に範囲としたいのは、格納されたリストをループしてminStop(最小停止点)とmaxStart(max tarting pint)私の列挙可能な範囲で最小範囲と最大範囲を取得しているだけで、私に必要な値を与えていません。私が間違っていることを理解するのを助けてください。お願いします!Enumerable Rangeが正しく動作していない

List<Grades> ranges = new List <Grades>(); 
var strGrades = "40-50, 55-62, 65-72, 80-82, 85-92, 95-99, 110-115"; 
var splitGrades = strGrades.Split(char.Parse(",")); 
foreach(var item in splitGrades) 
{ 
    var splitAgain = items.Split(char.Parse("-")); 
    var myMax = Math.Max(int.Parse(splitAgain[0]), int.Parse(splitAgain[1])); 
    var myMin = Math.Max(int.Parse(splitAgain[0]), int.Parse(splitAgain[1])); 

    //my enumerable list 
    var erange = Enumerable.Range(int.Parse(myMax), int.Parse(myMax)).ToList() 
    foreach (var maxrange in erange) 
    { 
     for (int q = myMin; q < maxrange; q++) 
     { 
     //custom extension method for Between 
     if (!q.Between((myMin), (myMax), true)) 
     { 
      //Public class Grades{public int Start, get; set }     
      ranges.Add(new Grades() 
      { 
       Start= q, 
      }); 
     } 
     } 
    }   
    } 
return ranges; 
} 

誰もが例えば(私のminStop値を得るために、私の列挙可能範囲を取得する方法を私に示してくださいすることができ:私の次のセットを取得し、その後、私の分ストップ値は50になり、40〜50:学年の最初のセットを55-62、私の最大開始値は55となるので、50-55から範囲を取得するために探しています。各セットの最後の値とその後のセットの最初の値が必要です。クリアな。任意の助けをいただければ幸いです!おかげ

+1

する必要がありますする必要があります

はあなたがMSDN /ドキュメンタリーを読みましたか? –

+1

'char.Parse("、 ")'?代わりにcharリテラルを使用しないでください: ''、 ''、 '' - ''? – Oded

+0

範囲は最大から最大までです。 – asawyer

答えて

6

あなたがEnumerable.Rangeのドキュメントを検索する場合は、第二aparameterカウントではなく、最大であることがわかります。

public static IEnumerable<int> Range(int start, int count) 

max - min + 1を2番目のパラメータとして渡す必要があります(最大値を含むと仮定します)。

また、最小値を最大値ではなく最初のパラメータとして渡す必要があります。

もう一つのバグは、myMinを最大値として計算し、最小値ではないことです。

+0

minを最小限度としてどのように計算するのですか?私のコードから、これを行うために私は何を変えるべきですか? – Naina

+0

'var myMin = Math.Max(...'この式では、「Max」という単語を「Min」という単語に置き換えることができます.... – CodesInChaos

+0

ありがとう、私はそれを見て、それを働かせます。 – Naina

1

それはこれがnから可算開始を作成し、n個の長さを持つだろう

var myMin = Math.Min(int.Parse(splitAgain[0]), int.Parse(splitAgain[1])); 

Enumerable.Range(int.Parse(myMax),int.Parse(myMax)) 

あるべきMinを見つけるためにまず第一に。それは

Enumerable.Range(int.Parse(myMax), int.Parse(myMax) - int.Parse(myMin) + 1) 

あなたのコードは

List<Grades> ranges = new List <Grades>(); 
var strGrades = "40-50, 55-62, 65-72, 80-82, 85-92, 95-99, 110-115"; 
var splitGrades = strGrades.Split(char.Parse(",")); 
foreach(var item in splitGrades) 
{ 
    var splitAgain = items.Split(char.Parse("-")); 
    int myMax = Math.Max(int.Parse(splitAgain[0]), int.Parse(splitAgain[1])); 
    int myMin = Math.Min(int.Parse(splitAgain[0]), int.Parse(splitAgain[1])); 

    //my enumerable list 
    var erange = Enumerable.Range(myMax, myMax - myMin + 1).ToList() 
    foreach (var maxrange in erange) 
    { 
     for (int q = myMin; q < maxrange; q++) 
     { 
     //custom extension method for Between 
     if (!q.Between((myMin), (myMax), true)) 
     { 
      //Public class Grades{public int Start, get; set }     
      ranges.Add(new Grades() 
      { 
       Start= q, 
      }); 
     } 
     } 
    }   
    } 
return ranges; 
}