我想对字符串列表进行排序。以下预排序字符串示例:
“2017-03-21 17:14:36.111我喜欢红色”
“2017-03-21 17:14:35.333我喜欢黄色”
“2017-03-21 17:14:36.111我喜欢绿色”
我想仅使用datetime子字符串对列表进行排序。
private void MergeAndSort(string[] lines1, string[] lines2)
{
var entries = new List<string>();
entries.AddRange(lines1);
entries.AddRange(lines2);
entries.Sort();
foreach (string entry in entries)
{
CombinedrichTextBox.AppendText(entry);
}
}
答案 0 :(得分:0)
假设您的日期/时间字符串长度保持不变,您可以这样做。
string[] entries =
{
"2017-03-21 17:14:36.380 I like Red",
"2017-03-21 17:14:35.380 I like Yellow",
"2017-03-21 17:14:36.380 I like Green"
};
var data = new List<Tuple<DateTime, string>>();
foreach (var entry in entries)
{
data.Add(
new Tuple<DateTime, string>(DateTime.Parse(entry.Substring(0, 23)),
entry.Substring(23)));
}
var sorted = data.OrderBy(e => e.Item1);
entries = sorted.Select(e => $"{e.Item1} {e.Item2}").ToArray();
答案 1 :(得分:0)
关于标准DateTime字符串的一个很酷的事情是,您不需要转换它们以对它们进行排序。你可以对字符串进行排序。
那么你的问题在于弄清楚日期/时间字符串的位置。你可以像Ahsan建议的那样做,并使用字符串中的位置。您可以查找字符串中的第一个字母。这取决于实际的字符串,而不仅仅是示例。
我可以只用一个C#语句吗?你敢打赌!
var sorted = lines1
.concat(item2)
.Sort((a,b) => string.Compare(a.Substring(0,23), b.Substring(0,23)))
.ToList();
这个例子有点草率,因为它假设在每个字符串的前面总会有一个标准日期,这通常是一个危险的假设。如果您还假设DateTime字符串都是唯一的,并且毫秒分辨率表明它们是,那么您不需要执行子字符串,您可以使用Sort()。