List 存储时间列表并按升序排序
我正在使用C#Net 4 我有一个以秒为单位的时间列表,最多600(10分钟),格式为######,目前我正在将这些时间收集到一个列表字符串中,然后使用.Sort() 下面是一个将其写入txt文件的示例List 存储时间列表并按升序排序,list,sorting,time,List,Sorting,Time,我正在使用C#Net 4 我有一个以秒为单位的时间列表,最多600(10分钟),格式为######,目前我正在将这些时间收集到一个列表字符串中,然后使用.Sort() 下面是一个将其写入txt文件的示例 193.225 193.225 88 195.489 195.489 89 197.741 197.741 90 199.993 199.993 91 2.334 2.334 2 20.213 20.213 13 202.246 202.246 92 204.51 2
193.225 193.225 88
195.489 195.489 89
197.741 197.741 90
199.993 199.993 91
2.334 2.334 2
20.213 20.213 13
202.246 202.246 92
204.51 204.51 93
206.762 206.762 94
我需要帮助找到一个简单的方法,把这些在正确的顺序,我做什么,我可以使用列表int,因为标签,分隔每个字段
这是我目前的代码
private void ExportMarkCollections(MarkCollection collection, string exportType)
{
if (exportType == "vixen3")
{
foreach (MarkCollection mc in MarkCollections)
{
MessageBox.Show(String.Format("{0}", mc.Name));
mymarks = "";
foreach (TimeSpan time in mc.Marks)
{
mymarks = mymarks + time;
}
MessageBox.Show(String.Format("{0}", mymarks));
}
}
if (exportType == "audacity")
{
List<string> BeatMarks = new List<string>();
iMarkCollection = 0;
foreach (MarkCollection mc in MarkCollections)
{
iMarkCollection++;
foreach (TimeSpan time in mc.Marks)
{
BeatMarks.Add(time.TotalSeconds + "\t" + time.TotalSeconds + "\t" + iMarkCollection);
if (MarkCollections.Count == 1)
iMarkCollection++;
}
}
BeatMarks.Sort();
string filter = "Audacity Marks (*.txt)|*.txt|All Files (*.*)|*.*";
saveFileDialog.DefaultExt = ".txt";
saveFileDialog.Filter = filter;
DialogResult result = saveFileDialog.ShowDialog();
if (result == DialogResult.OK)
{
string name = saveFileDialog.FileName;
using (System.IO.StreamWriter file = new System.IO.StreamWriter(name))
{
foreach (string bm in BeatMarks)
{
file.WriteLine(bm);
}
}
}
}
}
private void ExportMarkCollections(MarkCollection集合,string exportType)
{
如果(exportType==“vixen3”)
{
foreach(MarkCollections中的MarkCollection mc)
{
Show(String.Format(“{0}”,mc.Name));
mymarks=“”;
foreach(时间跨度时间,以mc.标记为单位)
{
我的分数=我的分数+时间;
}
Show(String.Format(“{0}”,mymarks));
}
}
if(exportType==“audacity”)
{
List BeatMarks=新列表();
iMarkCollection=0;
foreach(MarkCollections中的MarkCollection mc)
{
iMarkCollection++;
foreach(时间跨度时间,以mc.标记为单位)
{
添加(time.TotalSeconds+“\t”+time.TotalSeconds+“\t”+iMarkCollection);
if(MarkCollections.Count==1)
iMarkCollection++;
}
}
BeatMarks.Sort();
string filter=“Audacity Marks(*.txt)|*.txt|所有文件(*.*)|*.”;
saveFileDialog.DefaultExt=“.txt”;
saveFileDialog.Filter=Filter;
DialogResult=saveFileDialog.ShowDialog();
if(result==DialogResult.OK)
{
string name=saveFileDialog.FileName;
使用(System.IO.StreamWriter文件=新的System.IO.StreamWriter(名称))
{
foreach(BeatMarks中的字符串bm)
{
文件写入线(bm);
}
}
}
}
}
迈克的评论是正确的。例如,您可以这样做(注意-此代码中没有错误处理!):
然后:
list.Sort(CompareStrings);
但是,我建议首先不要将数字放入制表符分隔的字符串中。数据应该尽可能保持“干净”的格式,直到最后一刻(例如,直到在UI中显示),否则你只会让事情变得更加困难(你必须担心区域设置、小数点与逗号等)。考虑这些潜在的问题,如果你正在输出的文件将在不同的机器上读取/通过不同的应用程序读取。你的目标是哪种语言?到现在为止你都做了些什么?最后一列的格式不是#######,重要吗?哪一列应该被排序,或者你希望最后只有一列而不是三列?到目前为止,您尝试了什么?您当前的输出是什么?预期的输出是什么?您需要将前导零放在数字字符串中,或者将它们作为数字分开并按这种方式排序。目标语言是C#.Net 4,目前我填充列表并使用。排序,这是我现在的输出。最后一列是它应该是的,第一列是它应该排序的列。预期输出如图所示,但顺序正确。
list.Sort(CompareStrings);