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

时间:2011-08-04 11:00:31

标签: c# windows-phone-7

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

例如,数据的格式如下:

“上午9:34~附表12”。

我希望根据时间排序上午9:34 〜附表12”。

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

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

3 个答案:

答案 0 :(得分:3)

问题几乎肯定在于您尝试将字符串转换为DateTime:

Convert.ToDateTime(first)

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

我建议使用SubString删除“〜Schedule”,文本,然后用fomat字符串解析:

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

然后,您可以在比较中使用DateTime.TimeOfDay。

答案 1 :(得分:2)

首先你应该删除第三个字符串,因为sort委托只有两个参数 其次,您传递的数据不是有效的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)));
});

答案 2 :(得分:0)

你可以尝试类似的东西:

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