我正在使用C#.Net 4
我有一个以秒为单位的列表,最多600(10分钟),格式为##。###,目前我正在将它们收集到List字符串中,然后使用.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 204.51 93
206.762 206.762 94
我需要帮助找到一个简单的方法将它们按正确的顺序排列,我没有做什么我可以使用List 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);
}
}
}
}
}
答案 0 :(得分:0)
public static int CompareStrings(string a, string b)
{
double x = double.Parse(a.Substring(0, a.IndexOf('\t')));
double y = double.Parse(b.Substring(0, a.IndexOf('\t')));
return x.CompareTo(y);
}
然后:
list.Sort(CompareStrings);
但是,我建议首先不要将数字放入制表符分隔的字符串。数据应尽可能保持“干净”格式,直到最后一刻(例如,直到在UI中显示),否则你只是让自己变得更难(你必须担心区域设置,小数点与逗号等)。如果您输出的文件将在不同的计算机/不同的应用程序上读取,请考虑这些潜在的问题。