-3

我有一个字符串(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;
   //...
}

代码不是完整的...

4

2 回答 2

2

您只是通过使用字符串(以及单个字符串)使问题变得更加困难。使用一个ListTimeSpan像这样的东西:

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

以及 , 等的属性TotalMillisecondssTotalSeconds并且double可以根据需要进行格式化。

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

string myString = string.Join(",",
    reactionTimes.Select(x => x.TotalMilliseconds.ToString()).ToArray());
于 2013-10-29T18:57:58.640 回答
0

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

其中第一个看起来像这样:

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));

正如马特指出的那样,您可以通过使用TimeSpan.

于 2013-10-29T18:58:29.553 回答