2

我有一个可枚举的范围,我最初想要对范围执行的操作是遍历存储的列表并获取 minStop(最小停止点)和 maxStart(最大 tarting 品脱)但我只得到最小范围和最大范围我的可枚举范围并没有给我我需要的值。请帮我弄清楚我做错了什么。请!

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您会发现第二个参数是计数,而不是最大值。

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

所以你需要max - min + 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 回答