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

时间:2014-08-16 04:41:45

标签: c# visual-studio-2012

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

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个&#34; if-else&#34; &#34; if(CheckBoxDuplicate.Checked == true)&#34;。我理解它的方式,我检查数字是否均匀,然后检查CheckboxDuplicate按钮。如果选中它,我将值放在一个新列表中,然后删除重复的值。然后放入EvenNumbers列表框。出于某种原因,这部分不起作用。

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

2 个答案:

答案 0 :(得分:1)

在它上面撒上一些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,因为只会应用一个。{/ li>
  2. 你可以按照自己的方式去做,但效率不高。如果你这样做,你必须弄清楚你添加了哪些数字才能没有重复。
  3. 或者,你可以简单地创建我在上面的代码中完成的列表,然后在最后分配它们。它会为您节省时间和代码。

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

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

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

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

答案 1 :(得分:-1)

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