枚举int List <graderange> </graderange>

时间:2012-05-03 14:42:53

标签: c# asp.net

我真的不知道枚举列表,但经过一些研究后我发现这个列表可能有助于解决我的问题。所以我的设置中有一个名为strGrades的字符串,它是我手动更新的一系列字符串。范围是0155-0160,0271-0388,0455-0503,0588-687。我基本上想要做的是找到不在此成绩列表中的值(例如0161,0389,0504-0587 ...)

所以我提出了一个功能,可以让我在等级范围内获得每场比赛:

public static List<GradeRange> GetValidGrades()
{
    MatchCollection matches= Regex.Matches(Settings.Default.productRange,
                                           Settings.Default.srGradeRange);

    List<GradeRange> ranges= new List<GradeRange();

    if(matches.Count >0)
    {
        foreach (Match match in matches)
        {
            ranges.Add(new GradeRange() 23 {
                       Start= int.Parse(match.Groups["Start"].Value),
                       Stop= int.Parse(match.Groups["Stop"].Value)
            });    
         }

     }
     return ranges;
}

这是等级范围等级

public class GrandRange
{
    public int Start{get; set;)
    public int Stop {get; set; )
}

所以上面的函数可以捕获我的开始值和结束值,任何人都可以帮我把它放到一个列表中,我可以找到超出范围值的值,我只需要一个起点。非常感谢!

2 个答案:

答案 0 :(得分:3)

您可以使用custom extension method that creates .BetweenWhere

var myFilteredList = list.Where(x=>!myValue.Between(x.Start, x.Stop, true));

这不是最有效的答案,但是如果你需要一个不在某些范围之间的所有数字的列表,那么你可以这样做:

var missingNumbers = new List<int>();
var minStop = list.OrderBy(x=>x.Stop).Min().Stop;
var maxStart = list.OrderBy(x=>x.Start).Max().Start;
Enumerable.Range(minStop, maxStart).ToList()
    .ForEach(x=>
        {
            if(!x.Between(x.Start, x.Stop, true))
                missingNumbers.Add(x);
        }
    );

答案 1 :(得分:0)

这应该让你开始

        var strings = "0155-0160, 0271-0388, 0455-0503, 0588-687";
        var splitStrings = strings.Split(char.Parse(","));
        var grads = new List<GrandRange>();
        foreach (var item in splitStrings) { 
            var splitAgain = item.Split(char.Parse("-"));
            var grand = new GrandRange
            {
                Start = int.Parse(splitAgain[0]),
                Stop = int.Parse(splitAgain[1])
            };
            grads.Add(grand);
        }

    }