我正在尝试在数组列表中对数据进行排序。
例如,数据的格式如下:
“上午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);
});
答案 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();