0

我在单独的标签中有 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());
    }
}

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

4

6 回答 6

3

我会在这里更改整个设计(创建一个标签列表并使用它来迭代您的标签),但现在您可以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();
于 2013-11-11T22:36:32.300 回答
1

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

var numStrings = numbers.Select((i) => i.ToString());
selected_number1.Text = string.Join(",", numStrings);
于 2013-11-11T22:42:45.393 回答
0
for (i = 0; i < numbers.Length; i++)
{ 
selected_number1.Text = (numbers[i].ToString());
}

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

于 2013-11-11T22:40:45.513 回答
0

尝试这个:

int[] numbers = { orderNumber1, orderNumber2, orderNumber3, orderNumber4, orderNumber5 };
Array.Sort(numbers);
foreach (var item in numbers)
{
     Console.WriteLine(item);       
}
于 2013-11-11T22:42:00.100 回答
0

虽然你已经回答了......

 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();
        }
于 2013-11-11T22:43:25.160 回答
0

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

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() ;
}
于 2013-11-11T22:53:41.333 回答