我有一个可枚举的范围,我最初想要对范围做的是循环存储列表并获得minStop(最小停止点)和maxStart(max tarting pint)但我只是在确定最小范围和在我的可数范围内的最大范围,并没有给我我需要的值。请帮我弄清楚我做错了什么。请!
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的范围,我需要每组中的最后一个值和之后的集合的起始值。我希望我很清楚。任何帮助非常感谢!谢谢
答案 0 :(得分:8)
如果您查看Enumerable.Range
的文档,您会看到第二个参数是计数,而不是最大值。
public static IEnumerable<int> Range(int start, int count)
所以你需要传递max - min + 1
作为第二个参数,假设你的最大值是包容性的。
您还需要将最小值作为第一个参数传递,而不是最大值。
还有一个错误是你将myMin
计算为最大限度而不是限制的最小值。
答案 1 :(得分: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;
}