删除丢失数字有两个列表:比较两个列表,并与C#
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 });
你如何比较两个列表,寻找失踪的数字在列表1和列表1中移除这些数字?更确切地说,我需要找到一种方法来指定开始和结束位置进行比较。
我想象proccess应该很类似:
第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)
现在我们已经有了数(和数字本身)的位置在列表2比较(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}
结果正如你已经猜到了结果是新的列表1,没有它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)是最后一个数字会发生什么,但我需要得到接下来的两个数字?在例如由上面的数字为3,5,6,但它们应该没有不同于5,6,0或6,0,1或0,1,2。
我不明白“在列表1中查找缺少的数字,并从列表1中删除这些项目” – tsiorn 2012-04-10 13:29:22
列表2不包含数字4但列表1。这个想法是从list1中删除这个数字。但是,这不是问题。问题是在给定的位置开始列表比较。不是从一开始,但让我们说 - 从最后。我们仅比较列表中的一小部分,而不是全部。此外,假设如果我们在列表的末尾开始起始位置是合乎逻辑的 - 由于“超出范围”错误,我们将无法比较两个下一个数字。这就是为什么继续比较从名单开始至关重要的原因,即5,6,0 - 0是从开始开始 – Alex 2012-04-10 14:51:42
您需要更清楚地了解此目的和使用情况。 – 2012-04-11 09:58:03