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

本文关键字:列表 删除 | 更新日期: 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容器


从你的评论来看,这里有几件事:

  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<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);
    }
}