【问题标题】:C# how to sort user input from textbox in ascending orderC#如何按升序对文本框中的用户输入进行排序
【发布时间】:2021-09-29 06:41:39
【问题描述】:

我试图让用户按升序将十个字母数字值输入到 10 个文本框中。输入值后,我想使用任何排序算法来检查值是否已正确排序,以便向用户显示一条消息,说明它们的排序是正确还是不正确。我不确定如何实现这一点。

下面的代码是我随机显示给用户的字符串列表

 private void button1_Click(object sender, EventArgs e)
    {


        listBox1.Items.Clear();
        var list = new List<string> { "12fe", "46ge", "7uf", "15gs", "64ku", "42nt", "04bv", "07nh", "03lf", "86nj" };
        var random = new Random();

        for (var i = 0; i < 10; i++)
        {
           
            int index = random.Next(list.Count);
            listBox1.Items.Add(list[index]);
        }

private void button2_Click(object sender, EventArgs e) {

    }

    private void textBox1_TextChanged(object sender, EventArgs e)
    {

    }

here is my Listbox that generates random strings and my textboxes for the user to enter them in ascending order

【问题讨论】:

标签: c# string winforms sorting windows-forms-designer


【解决方案1】:

您可以使用 OrderBy by 对列表项进行排序,并使用 SequenceEqual 比较两个列表顺序。

private void button2_Click(object sender, EventArgs e)
{
    var list = new List<string> { "12fe", "46ge", "7uf", "15gs", "64ku", "42nt", "04bv", "07nh", "03lf", "86nj"};
    var orderedList = list.OrderBy(i => i);
    MessageBox.Show(orderedList.SequenceEqual(list).ToString());            
}

【讨论】:

    【解决方案2】:

    为什么不使用 .Sort() ?

    var list = new List<string> { "12fe", "46ge", "7uf", "15gs", "64ku", "42nt", "04bv", "07nh", "03lf", "86nj" };
    list.Sort();
    

    然后放置你的 listBox1

    【讨论】:

      【解决方案3】:

      可以添加一个特殊的按钮来检查订单;这就是我所做的,这是比较订单并显示在 MessageBox 中的结果,如您在问题中指出的那样,并通过 MessageBox 评级添加了图标以提高清晰度

      我做了一个程序来确保这是图片: The result of program to check ascending order

      这是我用来读取列表框内容然后从列表中比较以检查它是否是升序的代码

              private void sort_Click(object sender, EventArgs e)
          {
              List<string> list = new List<string> { };
      
              foreach (string temp in listBox1.Items)
              {
                  list.Add(temp);
              }
              var ascending_order = list.OrderBy(item => item);
              if (ascending_order.SequenceEqual(list))
              {
                  MessageBox.Show("The ordering of the list is correct", "Sort result",MessageBoxButtons.OK,MessageBoxIcon.Information);
              }
              else
              {
                  MessageBox.Show("The ordering of the list is Incorrect", "Sort result", MessageBoxButtons.OK, MessageBoxIcon.Error);
              }
      
          }
      

      这是我在这个网站上的第一个答案(stackoverflow)!

      【讨论】:

      • 感谢您的回答,但是我希望检查 10 个文本框中输入的答案是否按升序排列。
      【解决方案4】:

      在您的排序按钮中单击,取出所有 10 个文本并将它们放入一个数组中

      var a = new [] {
        textbox1.Text,
        textbox2.Text,
        textbox3.Text,
        ...
        textbox10.Text
      };
      

      现在您可以使用一些常见的 LINQ 排序对它们进行排序:

      var sorted = a.ToList().Sort();
      

      现在您可以使用 sequenceequal 来检查它们是否处于相同的顺序:

      var isSame = sorted.SequenceEquals(a);
      

      如果这是一项学术练习,并且您不希望使用 LINQ 之类的东西,我建议您考虑制作自己的排序(冒泡排序是一种易于编写的算法)和您自己的 sequenceEqual 版本(使用 for 循环遍历两个列表,检查元素是否相同)

      请记住,默认情况下,C# 排序区分大小写

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2013-05-29
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多