2

列挙可能な範囲があり、最初に範囲でやりたかったことは、保存されたリストをループして、minStop (最小停止点) と maxStart (最大ターティング パイント) を取得することでしたが、最小範囲と最大範囲のみを取得しています私の列挙可能な範囲であり、必要な値が得られません。私が間違っていることを理解するのを手伝ってください。お願いします!

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 値を取得する方法を教えてください (たとえば、最初のグレードのセット: 40-50、最小ストップ値は 50 で、次のグレード範囲のセット 55-62、私の最大開始値は 55 になるので、50 ~ 55 の範囲を取得しようとしています。各セットの最後の値と、その後のセットの開始値が必要です。明確であることを願っています。感謝! ありがとう

4

2 に答える 2

9

ドキュメントをEnumerable.Range調べると、2番目のパラメータがカウントであり、最大ではないことがわかります。

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

max - min + 1したがって、最大値が包括的であると仮定して、2番目のパラメーターとして渡す必要があります。

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

そしてもう1つのバグはmyMin、制限の最小ではなく最大として計算することです。

于 2012-05-07T12:59:15.133 に答える
1

まず第一に、Minそれがあるべきであることを見つけるために

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

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

これにより、n から始まり、n の長さを持つ列挙型が作成されます。

そのはず

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;
}
于 2012-05-07T13:00:34.010 に答える