【问题标题】:Sorting array of formatted time strings对格式化时间字符串的数组进行排序
【发布时间】:2011-08-02 01:33:07
【问题描述】:

我正在尝试对我的数组列表进行排序。

数组列表由时间格式的数据组成。

数组:

9:15 AM, 10:20 AM

我应该如何排序?

我从下面的代码得到的结果是:

10:20 AM
9:15 AM

下面是我的代码:

String timeText = readFileTime.ReadLine();
    timeSplit = timeText.Split(new char[] { '^' });
    Array.Sort(timeSplit);

foreach (var sortedArray in timeSplit)
    {
        sortedTimeListBox.Items.Add(sortedArray);
    }

【问题讨论】:

  • 您可能需要考虑将值转换为适当的 DateTime 结构并利用 DateTime.Compare。有关示例,请参见 dotnetperls.com/sort-datetime

标签: c# arrays sorting


【解决方案1】:

是的,因为您只是拆分一个字符串,所以您只是对一个 字符串数组 进行排序(意思是 19 之前,它不关心小数点)。要获得您想要的排序,您需要先将其转换为 DateTime,如下所示:

timeSplit = timeText
    .Split(new char[] { '^' });
    .Select(x => new { Time = DateTime.Parse(x), String = x })
    .OrderBy(x => x.Time)
    .Select(x => x.String)
    .ToArray();

在这里,我们所做的是:

  1. 像以前一样拆分字符串
  2. 创建一个新的匿名类型,其中包含原始字符串以及转换为DateTime 的字符串。
  3. DateTime 属性排序
  4. Select'ed 回到原来的字符串
  5. 将其转换为数组

timeSplit 现在包含按您需要排序的字符串。

【讨论】:

    【解决方案2】:
    Array.Sort(timeSplit, delegate(string first, string second)
    {
        return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second));
    });
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2016-07-18
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多