存储时间列表并按升序排序

时间:2014-01-26 18:51:29

标签: list sorting time

我正在使用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);
                    }
                }
            }
        }
    }

1 个答案:

答案 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中显示),否则你只是让自己变得更难(你必须担心区域设置,小数点与逗号等)。如果您输出的文件将在不同的计算机/不同的应用程序上读取,请考虑这些潜在的问题。