2 つのリストがあります。
List<int> list2 = new List<int>(new[] { 1, 2, 3, 5, 6 }); // missing: 0 and 4
List<int> list1 = new List<int>(new[] { 0, 1, 2, 3, 4, 5, 6 });
2 つのリストを比較し、List1 で欠落している数字を見つけて、これらの数字を List1 から削除するにはどうすればよいですか? より正確には、比較のために開始位置と終了位置を指定する方法を見つける必要があります。
プロセスはこれに非常に似ているはずだと思います:
ステップ1。
int start_num = 3; // we know that comparisons starts at number 3
int start = list2.IndexOf(start_num); // we get index of Number (3)
int end = start + 2; // get ending position
int end_num = list2[end]; // get ending number (6)
これで、List2 (3,5,6) で比較するための数値 (および数値自体) の位置が得られました。
ステップ 2.比較のために List1 内の数値の位置を取得するには、次のようにします。
int startlist1 = list1.IndexOf(start_num); // starting position
int endlist1 = list1.IndexOf(end_num); // ending position
範囲は次のとおりです: (3,4,5,6)
ステップ 3. 比較。トリッキーな部分はここから始まり、助けが必要です
基本的に、(3,5,6) の list2 と (3,4,5,6) の list1 を比較する必要があります。欠番は「4」です。
// I have troubles with this step but the result will be:
int remove_it = 4; // or int []
ステップ 4. 奇数の除去。
int remove_it = 4;
list1 = list1.Where(a => a != remove_it).ToList();
うまくいきますが、欠落した数字が 2 つある場合はどうなるでしょうか? すなわち
int remove_it = 4 // becomes int[] remove_it = {4, 0}
結果ご想像のとおり、結果は新しい List1 で、番号 4 は含まれていません。
richTextBox1.Text = "" + string.Join(",", list1.ToArray()); // output: 0,1,2,3,5,6
textBox1.Text = "" + start + " " + start_num; // output: 2 3
textBox3.Text = "" + end + " " + end_num; // output: 4 6
textBox2.Text = "" + startlist1; // output: 3
textBox4.Text = "" + endlist1; // output: 6
ステップ3で私を助けてくれますか、それとも正しい方向に向けてくれますか?
また、開始番号(start_num)が最後の番号である場合にどうなるか教えていただけますか?次の 2 つの番号を取得する必要がありますか? 上記の例では、数値は3,5,6でしたが、 5,6,0または6,0,1または0,1,2と変わらないはずです。