删除重复项并将列表放入列表框中
本文关键字:列表 删除 | 更新日期: 2023-09-27 18:18:18
这是一个统一的任务,我有问题的一部分。这是代码;
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<string> numbersText = this.TextBox1.Text.Split(',').ToList<string>();
foreach (var item in numbersText)
{
int num = int.Parse(item);
if (RadioButtonList1.SelectedValue == "Both")
{
if (num % 2 == 0)
{
if (CheckBoxDuplicate.Checked == true)
{
List<int> evenNumbers = new List<int>();
evenNumbers.Add(num);
List<int> 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按钮。如果它被选中,我把值放在一个新的列表中,然后删除重复的值。然后放入偶数列表框。由于某种原因,这部分不起作用。
如果你想帮助我,请不要只是张贴你的答案。这是我用c#做的第一个项目,对我来说很难理解一个优雅的解决方案。如果你有时间,请检查我的代码,让我知道我在哪里犯了错误。提前感谢您的宝贵时间。
在上面撒一点linq魔法,你就完成了。
var my_list = new List<int>{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容器
从你的评论来看,这里有几件事:
- 将
if
更改为if - else if
,因为只有一个将适用 - 你可以这样做,但这不是最有效的。如果你这样做,你必须弄清楚你添加了哪些数字,以避免重复。 或者,您可以像我在上面的代码中所做的那样简单地创建列表,然后在最后分配它们。这会节省你的时间和代码。
这里有更多的帮助,没有代码,因为我相信我已经涵盖了。
第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<string> numbersText = this.textBox1.Text.Split(',').ToList<string>();
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);
}
}