c#我如何订购字符串?

时间:2013-10-29 18:48:12

标签: c# string sorting

我有一个字符串(stringMess),我在字符串中保存反应时间(需要多长时间点击按钮)。现在我想在标签输出中获得最快和最短的时间,所以我必须对字符串进行排序。但我怎么能这样做? (我所做的一切,直到给我一个错误:()

public partial class Form1 : Form
{
//...
int Zeit = 0;
string Mess;
int Anzahl;
//...

private void btnRot_Click(object sender, EventArgs e)
{
   // a timer starts and when you click on the button,
   // the timer stops and write  the time in the stringMess
    Mess = Mess + Zeit + " , ";
    Anzahl = Anzahl + 1;
   //...
}

代码不是整个代码......

2 个答案:

答案 0 :(得分:2)

通过使用字符串(以及单个字符串),您只是使问题变得更加困难。使用List TimeSpan。像这样:

List<TimeSpan> reactionTimes = new List<TimeSpan>;

现在,当你启动计时器时,你可以这样做:

startTime = DateTime.Now;

当你停下来的时候:

reactionTimes.Add(DateTime.Now - startTime);    // Note: subtracting two DateTimes results in a TimeSpan

你可以轻松地对它们进行排序:

reactionTimes.Sort();

只有在想要将它们显示给用户时才将它们转换为字符串。这非常简单,具体取决于您希望它们显示的方式(毫秒?秒?周?年?),因为TimeSpan有一个采用格式字符串的.ToString方法。参见:

http://msdn.microsoft.com/en-us/library/dd992632.aspx

以及TotalMillisecondsTotalSeconds等属性double,可以根据需要进行格式化。

你甚至可以做(未经测试的代码):

string myString = string.Join(",",
    reactionTimes.Select(x => x.TotalMilliseconds.ToString()).ToArray());

答案 1 :(得分:0)

这听起来像你想要的,而不是一个字符串,是一个int(数组,列表,等等)的集合。如果你绝对必须有一个字符串(家庭作业?真的,非常奇怪的要求吗?)你需要拆分字符串。

第一个看起来像这样:

int Zeit = 0;
List<int> Mess = new List<int>();
int Anzahl;

然后你的按钮会这样做:

private void btnRot_Click(object sender, EventArgs e)
{
  //your other stuff here
  Mess.Add(Zeit);
  Anzahl++;
}

然后你会得到这样的最大和最小值:

var biggestZeit = Mess.Max();
var littlestZeit = Mess.Min();

如果你必须使用字符串,你仍然可以通过这样做得到整数的数组(或列表):

var resultList = Mess.Split(',').ToList();
var biggestZeit = resultList.Max(s => int.Parse(s));
var littlestZeit = resultList.Min(s => int.Parse(s));

Matt指出 - 您可以使用TimeSpan

的集合进一步简化