数组列表中数据的排序c# Windows phone 7

本文关键字:Windows phone 排序 列表 数据 数组 | 更新日期: 2023-09-27 18:04:23

我正在尝试在数组列表中排序我的数据。

例如,数据格式如下:

"9:34 AM~Schedule 12" .

和我想要它排序仅根据时间 "9:34 AM~Schedule 12"。

下面是对它进行排序的代码,但它似乎不起作用:

Array.Sort(timeSplit, delegate(string first, string second, string third)
{
    return DateTime.Compare(Convert.ToDateTime(first), Convert.ToDateTime(second), third);
});

数组列表中数据的排序c# Windows phone 7

问题几乎肯定是在您试图将字符串转换为日期时间的地方:

Convert.ToDateTime(first)

您的字符串不是'标准'格式。

我建议使用SubString删除"~Schedule"文本,然后用格式字符串解析:

var myDate = DateTime.ParseExact("9:34 AM~Schedule 12".Substring(0,7), "h:mm tt");

然后可以使用DateTime。

首先,您应该删除第三个字符串,因为排序委托只接受两个参数。
其次,您传递给它的数据不是有效的DateTime,您应该首先将其转换为日期时间。
所以:

Array.Sort(timeSplit, delegate(string first, string second)
{
    //assuming all data have the same format: "9:34 AM~Schedule 12" .
    int firstLength = first.IndexOf("~");
    int secondLength = second.indexOf("~");
    return DateTime.Compare(Convert.ToDateTime(first.Substring(0, firstLength)), Convert.ToDateTime(second.Substring(0, secondLength)));
});

你可以尝试这样做:

        string[] arr = new string[]
        {
            "9:34 AM~Schedule 1",
            "11:34 PM~Schedule 12",
            "9:34 AM~Schedule 3",
            "10:14 AM~Schedule 10",
            "9:34 AM~Schedule 2",
            "9:30 PM~Schedule 12"
        };
        var ordered = from a in arr
                      let split = a.Split('~')
                      orderby Convert.ToDateTime(split[0]), split[1]
                      select a;
        string[] orderedData = ordered.ToArray();