【问题标题】:Remove duplicates and put the list into a listbox删除重复项并将列表放入列表框中
【发布时间】:2014-08-16 17:49:34
【问题描述】:

这是一个单人作业,我对其中的一部分有疑问。这是代码;

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 个列表框)中。我已经完成了这部分。

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

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

【问题讨论】:

  • 在您的第二部分中,您只是添加了 1 个数字?你在那里做什么 ?另外,请检查我的答案以获得上述更易读的代码。
  • @Noctis:我为 numbersText 列表中的项目赋予 num 值?第 9 行。我是 C# 新手,我的代码还不优雅。
  • 这不是您的完整代码。请更新它。

标签: c# visual-studio-2012


【解决方案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,因为只有一个适用。
  2. 您可以按照自己的方式进行操作,但这并不是最有效的。如果你这样做,你必须弄清楚你添加了哪些数字以避免重复。
  3. 或者,您可以像我在上面的代码中所做的那样简单地创建列表,然后在最后分配它们。这将节省您的时间和代码。

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

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

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

注意事项:
将整数列表(input_list)保留为变量,因此当他更改选择时您无需解析它。

【讨论】:

  • 你认为,你现在可以帮助我吗?
  • 非常感谢。我会努力的。抱歉之前重复的问题。
【解决方案2】:
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);
    }
}

【讨论】:

  • -1 If you would like to help me, please don't post just your answer
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-11-22
  • 2011-01-13
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多