删除重复项并将列表放入列表框中

这是一项单一的任务,我遇到了部分问题。 这是代码;

namespace Assignment_1 { public partial class Classifier : System.Web.UI.Page // We are using a web form as stated { protected void Page_Load(object sender, EventArgs e) // No variables are initiated for the beginning { } protected void ButtonClassify_Click(object sender, EventArgs e) { if (this.TextBox1.Text != "") { List numbersText = this.TextBox1.Text.Split(',').ToList(); foreach (var item in numbersText) { int num = int.Parse(item); if (RadioButtonList1.SelectedValue == "Both") { if (num % 2 == 0) { if (CheckBoxDuplicate.Checked == true) { List evenNumbers = new List(); evenNumbers.Add(num); List distinctEvenNumbers = evenNumbers.Distinct().ToList(); ListBoxEvenNumbers.DataSource = distinctEvenNumbers; } else { //Put the results into the respective boxes ListBoxEvenNumbers.Items.Add(num.ToString()); } } else { //Put the results into the respective boxes ListBoxOddNumbers.Items.Add(num.ToString()); } } if (RadioButtonList1.SelectedValue == "Even") { if (num % 2 == 0) { //Put the results into the respective boxes ListBoxEvenNumbers.Items.Add(num.ToString()); } } if (RadioButtonList1.SelectedValue == "Odd") { if (num % 2 == 1) { //Put the results into the respective boxes ListBoxOddNumbers.Items.Add(num.ToString()); } } 

让我解释一下这个问题以及我所做的事情。 用户将数字列表插入文本框,然后有3个选项(radiolistbutton)。 他可以列出偶数,奇数或两种类型的数字。 它们显示在偶数和奇数列表框中(2个列表框)。 我已经完成了这一部分。

有一个复选框可以删除重复项,用户可以根据需要进行检查。 如果选中该按钮,则代码应删除重复项。 我尝试在第4个“if-else”“if(CheckBoxDuplicate.Checked == true)”中执行此部分。 我理解它的方式,我检查数字是否均匀,然后检查CheckboxDuplicate按钮。 如果选中它,我将值放在一个新列表中,然后删除重复的值。 然后放入EvenNumbers列表框。 出于某种原因,这部分不起作用。

如果您想帮助我,请不要只发布您的答案。 这是我在C#中的第一个项目,我很难理解一个优雅的解决方案。 如果你有时间,请检查我的代码,让我知道我犯了什么错误。 感谢您提前的时间。

在它上面撒上一些linq魔法,你就完成了。

 var my_list = new List{1,2,3,4,5,5,6,7}; var pair = my_list.Where (n => n%2 ==0); // 2,4,6 var odd = my_list.Where (n => n%2 ==1); // 1,3,5,5,7 var unique_pair = pair.Distinct(); // stays the same var unique_odd = odd.Distinct(); // 1,3,5,7 

从这里只是将它添加到适当的调用和GUI容器中


从您的评论中,这里有几件事:

  1. if更改为if - else if ,因为只有一个将适用。
  2. 你可以按照自己的方式去做,但效率不高。 如果你这样做,你将不得不弄清楚你添加了哪些数字,以便没有重复。
  3. 或者,你可以简单地创建我在上面的代码中完成的列表,然后在最后分配它们。 它会节省您的时间和代码。

这里有一些帮助,没有代码,因为我相信我已经覆盖了它。

第1步 :获取用户输入,并创建一个int列表。 (称之为:input_list)。
第2步 :根据他选择的内容(偶数,奇数,两者),您希望为每个列表框分配一个数字列表。 看看我上面的代码,它会为你做的。
第3步 :如果用户选择了唯一的,您将传递给那些列表框中的Distinct列表,再次查看我的上述代码。

如果您愿意,可以在选中复选框的情况下应用唯一。

笔记:
将整数列表(input_list)保存为变量,因此无论何时更改其选择,您都不需要解析它。

 public enum PairOddEnum { Evens, Odds, Both } public void BindControl(PairOddEnum type) { if (this.textBox1.Text != "") { List numbersText = this.textBox1.Text.Split(',').ToList(); var evens = numbersText.Where(t => int.Parse(t) % 2 == 0).Distinct(); var odds = numbersText.Where(t => int.Parse(t) % 2 == 1).Distinct(); if (type == PairOddEnum.Evens) { ListBoxEvenNumbers.DataSource = evens.ToList(); } else if (type == PairOddEnum.Odds) { ListBoxOddNumbers.DataSource = odds.ToList(); } else { ListBoxEvenNumbers.DataSource = evens.ToList(); ListBoxOddNumbers.DataSource = odds.ToList(); } } } protected void ButtonClassify_Click(object sender, EventArgs e) { if (RadioButtonList1.SelectedValue == "Both") { BindControl(PairOddEnum.Both); } if (RadioButtonList1.SelectedValue == "Even") { BindControl(PairOddEnum.Evens); } if (RadioButtonList1.SelectedValue == "Odd") { BindControl(PairOddEnum.Odds); } }