【问题标题】:c# sorting numbers from lowest to highestc# 数字从低到高排序
【发布时间】:2013-11-11 22:33:24
【问题描述】:

我在单独的标签中有 5 个随机数,并希望将它们从最低到最高排序并将它们放入新标签中。

示例: 随机数为 1 - 60 的标签。

number1.Text = 42
number2.Text = 51
number3.Text = 12
number4.Text = 33
number5.Text = 26

我想将这些数字从最低到最高分别放在单独的标签中。

例子:

sortNumber1.Text = 12
sortNumber2.Text = 26
sortNumber3.Text = 33
sortNumber4.Text = 42
sortNumber5.Text = 51

到目前为止,我尝试使用以下代码将所有排序的数字放在一个标签中:

private void button63_Click(object sender, EventArgs e)
{
    var orderNumber1 = Convert.ToInt32(number1.Text);
    var orderNumber2 = Convert.ToInt32(number2.Text);
    var orderNumber3 = Convert.ToInt32(number3.Text);
    var orderNumber4 = Convert.ToInt32(number4.Text);
    var orderNumber5 = Convert.ToInt32(number5.Text);
    int[] numbers = { orderNumber1, orderNumber2, orderNumber3, orderNumber4, orderNumber5};
    Array.Sort(numbers);

    int i = 0;
    for (i = 0; i < numbers.Length; i++)
    { 
        selected_number1.Text = (numbers[i].ToString());
    }
}

但只输入了最后一个(最高的)数字。如果某件事没有任何意义,那是因为我是菜鸟。我会理解的解决方案会很棒。谢谢你。

【问题讨论】:

  • 创建一个 List 并将文本解析为整数,然后使用排序函数。
  • 你只更新了一个标签,selected_number1.. 你不应该更新所有标签吗?
  • 我会创建List&lt;int&gt;,然后使用OrderByDescending&lt;&gt; 函数对它们进行排序。
  • 感谢您的回答。 MarcinJuraszek aneser 正确 :) 感谢您的帮助

标签: c# sorting numbers


【解决方案1】:

我会在这里更改整个设计(创建一个标签列表并使用它来迭代您的标签),但现在您可以使用以下代码替换您的 for 循环:

sortNumber1.Text = numbers[0].ToString();
sortNumber2.Text = numbers[1].ToString();
sortNumber3.Text = numbers[2].ToString();
sortNumber4.Text = numbers[3].ToString();
sortNumber5.Text = numbers[4].ToString();

【讨论】:

  • 谢谢。这真的帮助了我......我刚刚添加了 .ToString();在每个数字[0]、数字[1]等之后,它就起作用了。
【解决方案2】:

如果你想要一个字符串,你需要将它们连接起来。可能最简单的方法是使用 LINQ:

var numStrings = numbers.Select((i) => i.ToString());
selected_number1.Text = string.Join(",", numStrings);

【讨论】:

    【解决方案3】:
    for (i = 0; i < numbers.Length; i++)
    { 
    selected_number1.Text = (numbers[i].ToString());
    }
    

    在您的循环中,您每次都设置selected_number1.Text,所以这是唯一设置的。

    【讨论】:

      【解决方案4】:

      试试这个:

      int[] numbers = { orderNumber1, orderNumber2, orderNumber3, orderNumber4, orderNumber5 };
      Array.Sort(numbers);
      foreach (var item in numbers)
      {
           Console.WriteLine(item);       
      }
      

      【讨论】:

        【解决方案5】:

        虽然你已经回答了……

         List<TextBox> tBoxes = new List<TextBox>();
                tBoxes.Add(number1);
                tBoxes.Add(number2);
                tBoxes.Add(number3);
                tBoxes.Add(number4);
                tBoxes.Add(number5);
                List<int> allNums = new List<int>();
        
                foreach (TextBox item in tBoxes)
                {
                    allNums.Add(int.Parse(item.Text));
                }
        
        
                allNums.Sort();
                for (int i = 0; i < tBoxes.Count - 1; i++)
                {
                    tBoxes[i].Text = allNums[i].ToString();
                }
        

        【讨论】:

          【解决方案6】:

          当您遍历排序后的数组时,您使用以下语句反复将相同的控件设置为当前值:

          selected_number1.Text = (numbers[i].ToString());
          

          我可能会按照以下方式做一些事情:

          Label[] display  = { Sorted1 , Sorted2 , Sorted3 , Sorted4 , Sorted5 , } ;
          Label[] unsorted = { Label1  , Label2  , Label3  , Label4  , Label5  , } ;
          int[]   sorted   = unsorted.Select( x => int.Parse(x.Text) ).OrderBy( x => x ).ToArray() ;
          for ( int i = 0 ; i < 5 ; ++i )
          {
            display[i].Text = sorted[i].ToString() ;
          }
          

          【讨论】:

            猜你喜欢
            • 2021-08-07
            • 2020-08-10
            • 1970-01-01
            • 2012-04-05
            • 2021-02-17
            • 1970-01-01
            • 1970-01-01
            • 2020-11-12
            • 1970-01-01
            相关资源
            最近更新 更多