2

列挙されたリストについてはまったくわかりませんが、調査の結果、このリストが問題の解決に役立つ可能性があることがわかりました。そのため、設定に 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; )
}

したがって、上記の関数は私の Start 値と End 値を取得します。範囲外の値を見つけることができるリストにこれを入れるのを手伝ってもらえますか?開始点が必要です。本当にありがとう!

4

2 に答える 2

3

Whereとともに.Between を作成するカスタム拡張メソッドを使用できます。

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);
        }
    );
于 2012-05-03T14:47:40.217 に答える
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);
        }

    }
于 2012-05-03T14:52:28.610 に答える