c#从低到高排序数字
声明:本页面是StackOverFlow热门问题的中英对照翻译,遵循CC BY-SA 4.0协议,如果您需要使用它,必须同样遵循CC BY-SA许可,注明原文地址和作者信息,同时你必须将它归于原作者(不是我):StackOverFlow
原文地址: http://stackoverflow.com/questions/19917298/
Warning: these are provided under cc-by-sa 4.0 license. You are free to use/share it, But you must attribute it to the original authors (not me):
StackOverFlow
c# sorting numbers from lowest to highest
提问by Matej Merc
I have 5 random numbers each in separate label and would like to sort them form lowest to highest and place them in new label.
我有 5 个随机数,每个数字都在单独的标签中,并希望将它们从最低到最高排序,并将它们放在新标签中。
Example: Labels with random numbers from 1 - 60.
示例:带有 1 - 60 随机数的标签。
number1.Text = 42
number2.Text = 51
number3.Text = 12
number4.Text = 33
number5.Text = 26
I would like to place that numbers form lowest to highest each in separate label.
我想将这些数字从最低到最高分别放在单独的标签中。
Example:
例子:
sortNumber1.Text = 12
sortNumber2.Text = 26
sortNumber3.Text = 33
sortNumber4.Text = 42
sortNumber5.Text = 51
So far I try to place all sorted numbers in one label with this code:
到目前为止,我尝试使用以下代码将所有已排序的数字放在一个标签中:
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());
}
}
But only last (highest) number was entered. If something doesn't make any sense it's because I am noob. Solution that I will understand would be great. Thank you.
但只输入了最后一个(最高)数字。如果某事没有任何意义,那是因为我是菜鸟。我会理解的解决方案会很棒。谢谢你。
采纳答案by MarcinJuraszek
I would change entire design here (create a list of labels and use it to iterate over your labels), but for now you can make it work replacing your for
loop with following:
我会在这里更改整个设计(创建一个标签列表并使用它来迭代您的标签),但现在您可以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();
回答by EricKitt
for (i = 0; i < numbers.Length; i++)
{
selected_number1.Text = (numbers[i].ToString());
}
In your loop you are setting selected_number1.Text
each time so that's the only one getting set.
在你的循环中,你selected_number1.Text
每次都在设置,所以这是唯一一个设置。
回答by Doro
Try this:
尝试这个:
int[] numbers = { orderNumber1, orderNumber2, orderNumber3, orderNumber4, orderNumber5 };
Array.Sort(numbers);
foreach (var item in numbers)
{
Console.WriteLine(item);
}
回答by Jim Mischel
If you want a single string, you need to concatenate them. Probably the easiest way is with LINQ:
如果你想要一个字符串,你需要连接它们。可能最简单的方法是使用 LINQ:
var numStrings = numbers.Select((i) => i.ToString());
selected_number1.Text = string.Join(",", numStrings);
回答by Sorceri
all though you have already answered....
虽然你已经回答了....
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();
}
回答by Nicholas Carey
As you iterate over your sorted array, you repeatedly set the same control to the current value with this statement:
当您迭代排序数组时,您使用以下语句重复将相同的控件设置为当前值:
selected_number1.Text = (numbers[i].ToString());
I'd probably do something along these lines:
我可能会按照以下方式做一些事情:
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() ;
}